pin*_*x10 2 java list lexicographic-ordering
我有一个 Java ArrayList,列表中的每个元素都是一个具有 3 个字段(a、b 和 c)的对象。我应该按升序排列;如果 2 个元素的 a 值相同,则应按 b 降序排列它们;最后,如果 2 个元素即使对于 b 也具有相同的值,则它们应该按 c 升序排列。
我尝试了 stackoverflow 上发布的基于 Comparator 的其他解决方案,但我没有按降序排列。
有人可以帮助我吗?非常感谢!
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()
Comparator
Function
thenComparing()
如果a
,b
或c
是原语int
, long
ordouble
请记住使用comparingInt()
, comparingLong()
, comparingDouble()
,thenComparingInt()
等。