我想按字符串长度降序对 immutableList 的副本进行排序。我必须支持java 8以下的API。
我尝试了这个基本代码,但它仍然是相反的顺序
ImmutableList<String> possibleTexts = ImmutableList.of("aa", "bbbbbb");
final List<String> mutableList = new ArrayList<>(possibleTexts);
Collections.sort(mutableList, (s1, s2) -> Math.abs(s1.length() - s2.length()));
但是 mutableList 是 "aa", "bbbbbb"
而不是 "bbbbbb","aa"
最佳答案
您的输出与您期望的相反,因为 Math.abs(s1.length() - s2.length())
对于两个 都返回
和 4
|2 - 6||6 - 2|
。
Collections#sort
的文档还指出以下内容:
This sort is guaranteed to be stable: equal elements will not be reordered as a result of the sort.
要解决您的问题,您可以删除 Math#abs
并交换您的比较(String
的长度不能为负,因此不会发生上溢/下溢):
Collections.sort(mutableList, (s1, s2) -> s2.length() - s1.length());
但是,我建议使用 List#sort
与 Comparator#comparingInt
和 Comparator#reversed
,因为它比您当前的代码片段对我来说更具可读性。
关于java - 按字符串长度降序对字符串列表进行排序,不会更改列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62233723/