当前位置: 首页 > 知识库问答 >
问题:

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

白迪
2023-03-14

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

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表达式(没有比较器)。

共有1个答案

羊舌源
2023-03-14

如果您打算仅使用lambdas执行此操作,那么这将适用于列表数组。这假设您的groupage字段是int。

        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));

甚至您的< code>lambda表达式也是一个< code >比较器。没有某种< code >比较器,无论你如何构建它,你都无法进行比较。

 类似资料:
  • 问题内容: 这是我的清单: 我想按列表排序,如果等于则按,如果等于则按。但是到目前为止,我只能使用Lambda表达式按一个属性排序: 如果我尝试 原来是错误的… 问题答案: 将lambda 表达式 更改为lambda {block} ,而不必指定参数类型:

  • 你好我想对新创建的LinkedList进行升序排序,列表中的所有元素都是随机装箱的。我的任务是用比较器对它们进行排序,但我不允许编写实现比较器的类,而是应该用lambda表达式对其进行排序。这是我目前的代码: 到目前为止,我尝试使用集合和列表中的排序方法,但无法进一步帮助我。非常感谢您提前帮助我。

  • 问题内容: 有人可以给我看一个简单的示例,如何使用新的lambda语法在Java 8中按字母顺序排序。 问题答案: 对于字符串,这将工作

  • 问题内容: 在Python中,我试图按日期与lambda排序。我无法理解我的错误消息。消息是: 我的电话是 问题答案: 采用 在Python 2.x上,该函数按以下顺序使用其参数: 因此,如果没有,您传入的函数将被视为带有2个参数的函数。

  • 我试着取一个数字列表,过滤掉偶数,然后平方这些偶数,这样原始列表中的偶数就平方了。这是我的代码: 我尝试了一些其他的方法,但这是我目前所处的位置