我正在尝试加速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()。
答案 0 :(得分:2)
以下语句应与示例中的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());