我正在尝试加快 Streams API 的速度,但我已经习惯了 C# Linq 扩展函数的简单性以及使用 yield
关键字创建迭代器的能力。通常我会使用:
list.Aggregate(set, (acc, a) => { acc.add(a.Id); return acc});
或者类似的东西,但我没有立即看到它如何映射到 Streams API。
List<SomeObject> objs = ...
Set<String> ids = new HashSet<>();
for (SomeObject a : objs) {
ids.add(a.getId());
}
assertThat(ids.size(), objs.size());
编辑: 将 for 循环中的 SomeObject.getId() 更改为 a.getId()。
最佳答案
以下语句应等效于示例中的 for 循环。
Set<String> ids = objs.stream()
.map(a -> a.getId())
.collect(Collectors.toSet());
您还可以使用方法引用来代替lambda 表达式:
Set<String> ids = objs.stream()
.map(SomeObject::getId)
.collect(Collectors.toSet());
关于java - 使用 Java 流的此循环的 Aggregate/Reduce 版本是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23249790/