Java 使用两个索引对对列表进行排序

亚什·夏尔马

我想List<Pair<Long, Long>> list = new ArrayList<Pair<Long, Long>>();根据两个索引对 a 进行排序,首先根据第一个索引,如果第一个索引相等,则根据第二个索引使用 Java 8 lambda 函数。

我可以轻松地仅按第一个索引排序: Collections.sort(list,(o1, o2) -> o1.first < o2.first ? -1:0);

如果我想根据两个索引进行排序Collections.sort(list,(o1, o2) -> o1.first < o2.first ? -1 : o1.first == o2.first ? (o1.second < o2.second ? -1 : 0) : 0);但我认为这不是正确的方法。有人可以提供更好的语法吗?

对定义:

    class Pair<Type1, Type2> {
        Type1 first;
        Type2 second;

        Pair(Type1 f, Type2 s) {
            this.first = f;
            this.second = s;
        }

        public String toString() {
            return "(" + this.first + ", " + this.second + ")";
        }
    }
拉文德拉·兰瓦拉

使用Collections.sort像这样一个比较结构函数一起:

Collections.sort(list, 
    Comparator.comparing((Pair<Long, Long> p) -> p.first)
        .thenComparing(p -> p.second));

更新

或者,正如下面的评论中所建议的,您可以使用List.sort它比上面使用的实用方法更简洁一些。

list.sort(Comparator.comparing((Pair<Long, Long> p) -> p.first)
    .thenComparing(p -> p.second));

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用Java中的可比较按两个字段升序和降序对对象列表进行排序

如何使用两个不同的值对Java列表进行排序?

Java 8:惯用地创建一个Comparator以便根据对象在列表中的索引对对象进行排序

Java如何使用整数集对对象列表进行排序

根据内部列表中的字段对Java中的两个嵌套列表进行排序和分组

Java:使用比较器和属性的第二个单词对对象列表进行排序

如何用Java中的另一个对象的属性对对象列表进行排序?

在Java中按2个不同的子对象对对象列表进行排序

Java - 根据两个属性值对 JSONArray 进行排序

Java 8:如何使用 ArrayList 对两个嵌套的 Map 进行排序和收集?

Java:从索引到索引对列表进行排序

使用两个条件对对象的向量进行排序

使用Java 8根据对象的可为空的ArrayList属性对对象列表进行排序

在Java中按对象类型对对象列表进行排序

Java按名称对对象进行排序的列表,但一个对象应始终保留在顶部

如何通过两个属性和排序规则对对象列表进行排序

使用Lambda合并Java中不同类型的两个排序列表(字符串和整数)

对对象列表进行分组并使用Java集合进行计数

如何使用Java 8流对对象进行排序

在java中使用比较器逻辑对对象进行排序

使用2个条件对Java中的列表进行排序

使用Java流串比较两个列表

LEFT JOIN在两个列表使用Java流

使用Java遍历列表中的两个元素

使用Java 8迭代和过滤两个列表

使用Java8过滤两个列表

如何使用Java中具有不同类的两个对象和具有compare字段的列表进行过滤

在java中使用lambda对对象列表进行分组

找出两个排序列表是否包含相同元素Java的有效方法。