如何在Java中按不同顺序(asc/desc)对多个字段对列表进行排序?

pin*_*x10 2 java list lexicographic-ordering

我有一个 Java ArrayList,列表中的每个元素都是一个具有 3 个字段(a、b 和 c)的对象。我应该按升序排列;如果 2 个元素的 a 值相同,则应按 b 降序排列它们;最后,如果 2 个元素即使对于 b 也具有相同的值,则它们应该按 c 升序排列。

我尝试了 stackoverflow 上发布的基于 Comparator 的其他解决方案,但我没有按降序排列。

有人可以帮助我吗?非常感谢!

Ole*_*.V. 7

Comparator.reversed() 用于降序排列

    Comparator<Element> compar = Comparator.comparing(Element::getA)
            .thenComparing(Comparator.comparing(Element::getB).reversed())
            .thenComparing(Element::getC);
    yourArrayList.sort(compar);
Run Code Online (Sandbox Code Playgroud)

除了该方法之外,我还利用了重载的reversed事实:一个方法采用 a作为参数,我们需要将其反转,另一个方法仅采用方法引用(或 lambda)作为参数(在 的声明中)。thenComparing()thenComparing()ComparatorFunctionthenComparing()

如果a,bc是原语int, longordouble请记住使用comparingInt(), comparingLong(), comparingDouble(),thenComparingInt()等。