我试图用intstream找到三个数字的中间值,但遇到了不规则行为。
所以,这里是我的流:
IntStream.of(first, second, third).limit(2).max().ifPresent(System.out::println);
我们的想法是通过用极限值切断最高值得到中间值,然后从这两个值中得到最大值。该方法在大多数情况下都有效,但在以下情况下会失效: first = 9 second = 8 third = 0
代码在以下情况下运行良好: first = 0 second = 8 third = 9
这毫无意义,因为根据
返回其元素为指定值的顺序流。
在限制之前添加对sequential的调用并不能修复这个bug。JDK14和JDK8的行为是一致的。
我第一次在repl.it上遇到它。
1条答案
按热度按时间bfnvny8b1#
如注解中所述,在调用limit之前,需要对流进行排序。