首页 新闻 搜索 专区 学院

下面两种写法有啥区别

0
悬赏园豆:5 [已解决问题] 解决于 2021-08-20 15:45

第一种
menuList.stream().collect(Collectors.maxBy(Comparator.comparing(Menu::getId))).get();
第二种 menuList.stream().collect(Collectors.collectingAndThen(Collectors.maxBy(Comparator.comparing(Menu::getId)),Optional::get));

兽怖鸟鳓的主页 兽怖鸟鳓 | 初学一级 | 园豆:134
提问于:2021-08-19 15:29
< >
分享
最佳答案
0

1、两种写法在功能上是等同的。
2、第二种collectingAndThen是对流的处理结果又进行一步操作、虽然可以按照你的写法进行但脱离了设计的初衷。
原本是对流进行进一步加工,比如:collectingAndThen(toList(), list -> {你的操作})
3、第一种写法也脱离了设计的初衷:
stream..sorted().findFirst()就能达到你的需求,collect操作就是用来让执行收集操作的,collect中进行reduce不推荐。
总结:建议不使用上述两种写法,写法是灵活多变的,但要考虑设计规约和团队之间的协作,并推崇简洁的代码。

收获园豆:5
河图书卦 | 菜鸟二级 |园豆:204 | 2021-08-20 15:00

自定义收集器操作可以参考下demo:https://www.cnblogs.com/htsg/p/15043848.html
自定义收集器有助于更好掌握Stream。

河图书卦 | 园豆:204 (菜鸟二级) | 2021-08-20 15:05
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册