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