我正在研究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)
你将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)
| 归档时间: |
|
| 查看次数: |
230 次 |
| 最近记录: |