Java 使用Array.sort和Lambda表达式按降序排序对象

Java 使用Array.sort和Lambda表达式按降序排序对象,java,sorting,Java,Sorting,我想按降序对对象集合进行排序 Arrays.sort(itemDetails, (a, b) -> String.valueOf(a.getAvailableQuantity()) .compareTo(String.valueOf(b.getAvailableQuantity()))); 下面的代码正在按升序对itemDetails对象进行排序 Arrays.sort(itemDetails, (a, b) -> String.valueO

我想按降序对对象集合进行排序

Arrays.sort(itemDetails, (a, b) -> 
    String.valueOf(a.getAvailableQuantity())
          .compareTo(String.valueOf(b.getAvailableQuantity())));
下面的代码正在按升序对itemDetails对象进行排序

Arrays.sort(itemDetails, (a, b) -> 
    String.valueOf(a.getAvailableQuantity())
          .compareTo(String.valueOf(b.getAvailableQuantity())));
但是我希望输出按降序排列。

切换到
(b,a)

Arrays.sort(itemDetails, (a, b) -> 
    String.valueOf(a.getAvailableQuantity())
          .compareTo(String.valueOf(b.getAvailableQuantity())));
实际上,将名称更改为有意义的,这样排序逻辑就可以理解了

添加一个减号:

Arrays.sort(itemDetails, (a, b) -> -String.valueOf(a.getAvailableQuantity()).compareTo(String.valueOf(b.getAvailableQuantity())));

使用
Comparator.comparing
(避免重复
String.valueOf
getavailablequality
)和
Comparator.reversed()
(清楚地传达您正在反转排序顺序的事实):


其中,
ItemDetails
是数组的元素类型的名称(或某些超类型,也有
GetAvailableEquality
方法)。

如果
compareTo
返回了
Integer.MIN_值
?@则不会返回。但是如果你担心的话,你也可以交换a和b。在这种特殊情况下可能不会,所以你可以在这里使用“一个奇怪的技巧”,但是它应该附带一个健康警告,在一般情况下不应该这样做。@AndyTurner fair Enough我建议不要做像翻转参数顺序这样微妙的事情:它看起来像是一个打字错误,TBH。如果你要做这样的事,我会颠倒您在lambda正文中使用参数的顺序。@AndyTurner添加了注释
实际上是将名称更改为有意义的,因此排序逻辑可以理解
谢谢,但这在我的情况下不起作用,给了我一个对象类型转换错误。@Shubhi将数组元素的类型添加到lambda参数中,例如
(ItemDetail a)->
。我添加了它,但这给了我运行时错误。@Andy Turner