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

【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条)

报告相同问题?

悬赏问题

  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用
  • ¥15 C++ yoloV5改写遇到的问题
  • ¥20 win11修改中文用户名路径
  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
  • ¥15 帮我写一个c++工程