java – 如何仅使用reduce查找List中的最小值?
我想只使用reduce来查找List< Integer>中的最小值.这是我最初的想法:
List<Integer> lst; //init //assuming it's not empty lst.stream().reduce(lst.get(0),(x,y) -> x.compareTo(y) <= 0 ? x : y); 但在the contract的方法中说:
因此,唯一可能的身份值保留累加器(x,y)的合同 – > x.compareTo(y)< = 0? x:y是最大值.因此我们有一些鸡蛋问题. 如何解决它保留所有合同? 解决方法
使用Integer.MAX_VALUE.其他一切都将小于或等于,所以它满足所有t的min(identity,t)== t的契约.
进一步研究后,我认为你不需要这个身份.有一个简化只是将函数作为参数,http://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html#reduce-java.util.function.BinaryOperator-.这将返回Optional< Integer>而不是整数.我相信,原因是该方法必须处理流中没有元素的情况.在这种情况下,Optional< Integer> version会返回一个空值;虽然需要一个标识并返回一个Integer的版本会返回标识值(类似于数学中如果添加一组数字并且它是空的,你应该得到0,如果你乘以一组数字并且它是空的,你应该得到1).所以,如果你知道你的列表是非空的,你实际上应该能够写 lst.stream().reduce((x,y) -> x.compareTo(y) <= 0 ? x : y).get(); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |