intstream异常行为删除第一个元素

x33g5p2x  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(367)

我试图用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上遇到它。

bfnvny8b

bfnvny8b1#

如注解中所述,在调用limit之前,需要对流进行排序。

IntStream.of(first, second, third).sorted().limit(2).max();
//                                 ^^^^^^^

相关问题