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