【发布时间】:2018-08-21 10:37:54
【问题描述】:
我的问题是我想要以下代码的细分
我有一张地图,我想使用以下 reduce() 函数将某些字符串替换为地图的值:
Map<String, String> environmentMap = new HashMap<>();
Function<String, String> replaceFunction = environmentMap.entrySet()
.stream()
.reduce
(Function.identity(),
(function,entrySet) -> stringToReplace -> function.apply(stringToReplace.replaceAll(entrySet.getKey(),entrySet.getValue(),
Function::andThen);
不知何故,我对 replaceFunction 部分感到困惑,但让我根据我的理解对其进行分解。
-
environmentMap.entrySet().stream()行将创建Entry<String,String>的流。 - 我正在使用的
reduce()方法采用标识、累加器和组合器。 - 由于我没有使用并行流,我想省略组合器,但编译器会抛出错误。有什么办法可以把这个累加器变成
BinaryOperator<T>? -
Function.identity()将始终返回一个返回输入参数的函数。在这种情况下类型为String - 接受 BiFunction 的第二个参数是我感到困惑的事情之一。
(function,entrySet) -> stringToReplace -> function.apply(stringToReplace.replaceAll(entrySet.getKey(),entrySet.getValue()。 - Function::andThen 在这个过程中做了什么?
- 最后,
BiFunction<T, U, R>中的返回类型Function<String,String>是从哪里来的??
【问题讨论】:
标签: java lambda java-8 java-stream