你好杰米 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 乘性高斯噪声在深度学习网络中的应用
  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥30 python代码,帮调试,帮帮忙吧