在带有比较器的Lambda表达式中的stream min()和max()方法,只返回第一个和最后一个元素,不返回minmax元素。

问题描述 投票:-2回答:1

溪流 min()max() 在Lambda Expression with Comparator中,方法只返回第一个和最后一个元素,不返回minmax元素。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

java lambda stream java-stream
1个回答
2
投票

你可以简单地使用 compareTo 而不说明 ab 为比较。

使

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

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

您已经使用了这种方法(compareTo) Comparable Integer 在这里,你却否定了这一结果。逆转 的补码。

a.compareTo(b) 返回一个正数(最可能是1),如果 a 大于 b如果它们相等,则结果为0,如果 b > a 你会得到一个负数的结果。由于您已经否定了它,订单结果将与您想要的完全相反 (minmaxmaxmin).

© www.soinside.com 2019 - 2024. All rights reserved.