我的问题是,我希望细分以下代码
我有一张地图,我希望使用以下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()
将始终返回一个返回输入参数的Function。在String
(function,entrySet) -> stringToReplace -> function.apply(stringToReplace.replaceAll(entrySet.getKey(),entrySet.getValue()
。Function<String,String>
中的返回类型BiFunction<T, U, R>
来自哪里?答案 0 :(得分:0)
Function<String, String> replaceFunction = environmentMap.entrySet()
.stream()
.reduce(Function.identity(),
(function,entrySet) -> stringToReplace -> function.apply(stringToReplace.replaceAll(entrySet.getKey(),entrySet.getValue())),
Function::andThen);
environmentMap.entrySet().stream()
将创建Entry<String,String>
。我正在使用的reduce()
方法带有标识,累加器和combiner.item 。
直到你是对的,但身份,累加器和合并器解析如下:
Function.identity()
已解析为Function<String, String>
。 累积器 - (function,entrySet) -> stringToReplace -> function.apply(stringToReplace.replaceAll(entrySet.getKey(),entrySet.getValue()))
。
以下部分,
`stringToReplace -> function.apply(stringToReplace.replaceAll(entrySet.getKey(),entrySet.getValue()))`
被解析为Function<String, String>
。
因此整个累加器都被解析为
`BiFunction<Function<String,String>, Entry<String,String>,Function<String,String>`
组合 - Function::andThen
已解析为BinaryOperator<Function<String,String>, Function<String,String>>
因此,要回答6和7中的问题,Function::andThen
充当组合者; 7是我上面描述的累加器。