【问题标题】:How to sort int[] with multi-line lambda expression in Java如何在 Java 中使用多行 lambda 表达式对 int[] 进行排序
【发布时间】:2020-04-07 15:57:56
【问题描述】:

This question 有一个关于如何使用多行 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 表达式(没有比较器),我可以使用任何其他方法(不必使用 Arrays.)。

【问题讨论】:

  • 这能回答你的问题吗? java comparator for arrays sort
  • 效率不高,但arr = Arrays.stream(arr).boxed().sorted((int1, int2) -> { /* your logic */ }).mapToInt(Integer::intValue).toArray(); 可以。
  • @user85421 谢谢。

标签: java arrays sorting lambda


【解决方案1】:

如果您打算仅使用 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,无论您如何构造它,都无法进行比较。

【讨论】:

    猜你喜欢
    • 2016-07-22
    • 2017-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-10
    • 1970-01-01
    相关资源
    最近更新 更多