Map<String, DoItemDTO> productMap = doItemList.stream().collect(Collectors.toMap(x -> String.format("%s%s", x.getProductCode(), x.getBarCodeUnit()),
Function.identity(), (o1, o2) -> o1));
3个参数分别是什么意思,Function.identity()是干涉么的
Map<String, DoItemDTO> productMap = doItemList.stream().collect(Collectors.toMap(x -> String.format("%s%s", x.getProductCode(), x.getBarCodeUnit()),
Function.identity(), (o1, o2) -> o1));
3个参数分别是什么意思,Function.identity()是干涉么的
Collectors.toMap将集合转换为map,它的原型是
toMap(Function<? super T,? extends K> keyMapper, Function<? super T,? extends U> valueMapper, BinaryOperator<U> mergeFunction)
需要3个参数,x -> String.format("%s%s". x.getProductCode(), x.getBarCodeUnit()) 这个是键选择器,这里传入的lambda是
将集合的每一项转换为一个字符串,这个字符串是把ProductCode和CodeUnit组合起来。作为map里面的key。
Function.identity(),这是值选择器,前面说了,它就是x -> x,也就是map的value是每一项它本身
(o1, o2) -> o1这个是合并函数,就是如果遇到同一个键遇到多个值,用它可以累加起来,但是这里o1,o2直接选择o1,就是把相同的其余项丢掉。
这段代码执行之后,doItemList将会变成一个map,它的键是x.getProductCode()和 x.getBarCodeUnit()连起来,值是对应的doItemList那一项,你可以通过前者构成的字符串检索到对应的那条记录。