java - 使用 Java 流的此循环的 Aggregate/Reduce 版本是什么?

标签 java java-8

我正在尝试加快 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/

相关文章:

java - 为什么我对 QueueConnectionFactory 的 JNDI 查找返回空值?

java - 来自 init() 的方法调用 - Java

java - 检查数组中的多个值

java.lang.RuntimePermission accessClassInPackage.sun.security.pkcs11.wrapper?

java - 使用Optional.of()方法进行方法链接是个好主意吗?

java - sonarLint:使这个匿名内部类成为 lambda

java - Android 内存 - 声明全局变量

具有过滤条件工作流程的 Java 8 流

java - 将 Haskell 函数转换为 java "function"

java - 如何从 REST post 请求中解析 Json 数组