有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

带有比较器的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) 个答案

  1. # 1 楼答案

    只需使用compareTo的方法引用,而无需指定ab进行比较:

    制造

    al.stream().min((a, b) -> -a.compareTo(b))
    

    al.stream().min(Integer::compareTo).get();
    

    您在这里使用了Comparable{}的这个方法(compareTo),但是您否定了结果,将输出反转为所需结果的补码

    a.compareTo(b)返回一个正数(最有可能是1),如果a大于b,如果它们相等,结果将为0,如果b > a,则得到一个负数。因为您已经否定了它,所以顺序结果将与您想要的正好相反(minmaxmaxmin