繁体   English   中英

如何在 Java 中使用多行 lambda 表达式对 int[] 进行排序

[英]How to sort int[] with multi-line lambda expression in Java

这个问题有一个关于如何使用多行 lambda 表达式对列表进行排序的答案:

list.sort((o1, o2) -> {
    int cmp = o1.getGroup().compareTo(o2.getGroup());
    if (cmp == 0)
        cmp = Integer.compare(o1.getAge(), o2.getAge());
    if (cmp == 0)
        cmp = o1.getName().compareTo(o2.getName());
    return cmp;

});

不幸的是,这似乎不适用于原始数组int[] arr

Arrays.sort(arr, (int1, int2) -> {
    // some lambda, various if-else statements for example
});

如何在 Arrays.sort() 中使用多行 lambda 表达式对原始数组进行排序?

只要它使用 lambda 表达式(没有比较器),我对任何其他方法都很好(不必使用Arrays. )。

如果您打算只使用lambdas ,那么这将适用于listsarrays 这假定您的groupage字段是整数。

        Comparator<Item> comp = (o1, o2) -> {
            int cmp = Integer.compare(o1.getGroup(), o2.getGroup());
            cmp = cmp == 0 ? Integer.compare(o1.getAge(), o2.getAge()) : cmp;
            cmp = cmp == 0 ? o1.getName().compareTo(o2.getName()) : cmp;
            return cmp;
        };

        list.sort(comp);

        Arrays.sort(items, comp);

但我会使用List并按如下方式执行:

    list.sort(Comparator.comparing(Item::getGroup)
                .thenComparing(Item::getAge)
                .thenComparing(Item::getName));

甚至您的lambda表达式也是一个comparator 无论您如何构造它,都无法在没有某种Comparator的情况下进行比较。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM