带有比较器的Lambda表达式中的java Stream min()和max()方法只返回第一个和最后一个元素,不返回min/max元素
在带有比较器的Lambda表达式中,Stream min()
和max()
方法只返回第一个和最后一个元素,不返回min/max元素。
谁能解释一下min()和max()
的工作原理吗
public class Hello {
public static void main(String[] args) {
ArrayList<Integer> al = new ArrayList<>();
al.add(0);
al.add(5);
al.add(10);
al.add(15);
al.add(20);
al.add(25);
System.out.println(al);
Integer l = al.stream()
.min((a, b) -> -a.compareTo(b))
.get();
System.out.println(l);
Integer l2 = al.stream()
.max((a, b) -> -a.compareTo(b))
.get();
System.out.println(l2);
}
}
产量:分别为25和0
# 1 楼答案
只需使用
compareTo
的方法引用,而无需指定a
和b
进行比较:制造
是
您在这里使用了}的这个方法(
Comparable
{compareTo
),但是您否定了结果,将输出反转为所需结果的补码a.compareTo(b)
返回一个正数(最有可能是1),如果a
大于b
,如果它们相等,结果将为0,如果b > a
,则得到一个负数。因为您已经否定了它,所以顺序结果将与您想要的正好相反(min
⇒max
和max
⇒min
)