让我们看一段代码:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
System.out.println(numbers.stream().max(Integer::max).get());
结果是1,而不是5。
Stream.max(),是以返回值的正负和零值来判断数据大小的。对于上述例子,Stream.max()中Integer::max返回的总是正数,这样第一个数据比较下来,永远最大的。
正确写法如下:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
Optional<Integer> max = numbers.stream().reduce(Integer::max);
System.out.println(max.orElse(0));
System.out.println(numbers.stream().max(Integer::compare).get());
System.out.println(numbers.stream().mapToInt(i -> i).max().getAsInt());
Stream.min(Integer::min)也和上面是一个道理。