java - 如何使用 "reduce"将此循环转换为函数表达式?

标签 java functional-programming java-stream

我有这个 Java 8 代码:

Contact contact = new Contact("");
for (ContactEvent event : events) {
    contact = contact.apply(event);
}

我想使用 Stream.reduce 方法将其转换为功能。我已经尝试过:

Contact contact = events.stream()
    .reduce(new Contact(""), 
    (contact1, contactEvent) -> contact1.apply(contactEvent), //Ok!
    (contact12, contact2) -> null); //I don't want this!

为什么我必须合并两个联系人?我应该在组合器中做什么?

如果我像上面一样返回null,它就可以正常工作。调试器甚至不执行该行(返回 null)。

最佳答案

事实上,在这种特定情况下你无法避免组合器函数。

但是,值得一提的是,组合器函数 (contact12, contact2) -> null 根本不会被调用。为了使组合器工作,流必须是并行的。否则,只会调用累加器函数。

关于java - 如何使用 "reduce"将此循环转换为函数表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50877748/

相关文章:

java - Proguard:如何防止在 Android 中重命名 Packagename?

scala - 将映射参数应用于函数的默认/命名参数的功能方法

java - 使用选项类型是否不需要 if 语句?

java - 按第一个字符对单词进行分组

java - 使用 Stream 从 int[] 数组中查找奇数

javax.naming.initialcontext 是一个受限制的类 google app engine

java - java swing应用程序中的快速搜索?

java - 使用 Mockito 测试委托(delegate)方法

collections - 在 clojure 中使用 'map' 和不同大小的集合

java - 使用 java 8 streams api 确定对象之间的关系