Reduce Integer.min不返回最低元素

PAA*_*PAA 9 java java-8

我正在研究stream reduce并尝试运行非常简单的程序.

为什么Integer.min不返回最小数量,如Integer.min返回最大数量?

public class Reducing {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(3,4,5,1,2);
        Integer sum = numbers.stream().reduce(0, (a, b) -> a+ b);
        System.out.println("REDUCE : "+sum);

        int sum2 = numbers.stream().reduce(0, Integer::sum);
        System.out.println(sum2);

        int max = numbers.stream().reduce(0, (a, b) -> Integer.max(a, b));
        System.out.println("MAX == > "+max);

        int min = numbers.stream().reduce(0, (a, b) -> Integer.min(a, b));
        System.out.println("MIN == > "+min);
    }
}
Run Code Online (Sandbox Code Playgroud)

输出==>

REDUCE : 15
15
MAX == > 5
MIN == > 0
Run Code Online (Sandbox Code Playgroud)

小智 14

您正在提供0身份项目min.该值也将用于计算.

int min = numbers.stream().reduce(0, (a, b) -> Integer.min(a, b));
Run Code Online (Sandbox Code Playgroud)

所以几乎就像拥有一样

Arrays.asList(0,3,4,5,1,2)
Run Code Online (Sandbox Code Playgroud)

你不要在示例中省略identity元素

int min = numbers.stream().reduce((a, b) -> Integer.min(a, b)).get();
Run Code Online (Sandbox Code Playgroud)

  • 或使用正确的标识值:`.reduce(Integer.MAX_VALUE,Integer :: min)` (6认同)

Mal*_*alt 5

你将0初始值传递给reduce : reduce(0, (a, b) -> Integer.min(a, b)). 因此它是最小的数字.通过Integer.MAX_VALUE代替或使用以下内容:

Optional<Integer> min = numbers.stream().reduce((a, b) -> Integer.min(a, b));
System.out.println("MIN == > " + min.get());
Run Code Online (Sandbox Code Playgroud)

或者,即使没有lambda:

Optional<Integer> min = numbers.stream().reduce(Integer::min)
Run Code Online (Sandbox Code Playgroud)

还有一个选项可以使用reduce.and使用min:

Optional<Integer> min = numbers.stream().min(Comparator.naturalOrder());
Run Code Online (Sandbox Code Playgroud)