你好杰米
2018-07-26 08:05
采纳率: 95%
浏览 720
已采纳

【Java】java8有段代码看读懂,求解释

 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()是干涉么的

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 收藏
  • 邀请回答

6条回答 默认 最新

  • threenewbee 2018-07-26 10:00
    已采纳
     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那一项,你可以通过前者构成的字符串检索到对应的那条记录。
    
    评论
    解决 无用
    打赏 举报
  • 查看更多回答(5条)

相关推荐 更多相似问题