如何避免这样做:
不要使用.sorted(Comparator.reverseOrder())或.sorted(Collections.reverseOrder()),因为它只会按降序排序元素。
对于给定的Integer输入使用它:
[1,4,2,5,3]
输出结果如下:
[5,4,3,2,1]
对于字符串输入:
[" a ", " d ", " b ", " e ", " c "]
输出结果如下:
[e, d, c, b, a]
不要使用.sorted((a, b) -> -1)(后面的解释)
最简单的正确方法是:
List<Integer> list = Arrays.asList(1, 4, 2, 5, 3);
Collections.reverse(list);
System.out.println(list);
输出:
[3,5,2,4,1]
String也一样:
List<String> stringList = Arrays.asList("A", "D", "B", "E", "C");
Collections.reverse(stringList);
System.out.println(stringList);
输出:
[c, e, b, d, a]
不要使用.sorted((a, b) -> -1)!
它打破了比较国契约,可能只适用于某些情况。只在单线程上,而不是并行。
洋基的解释:
(a, b) -> -1打破了Comparator的契约。这是否有效取决于排序算法的实现。JVM的下一个版本可能会打破这一点。实际上,我已经可以在我的机器上使用IntStream重复地打破这个。.boxed范围(0 10000).parallel()()。sorted((a, b) -> -1).forEachOrdered(System.out::println);
//Don't use this!!!
List<Integer> list = Arrays.asList(1, 4, 2, 5, 3);
List<Integer> reversedList = list.stream()
.sorted((a, b) -> -1)
.collect(Collectors.toList());
System.out.println(reversedList);
正数输出:
[3,5,2,4,1]
可能的输出在并行流或与其他JVM实现:
[4,1,2,3,5]
String也一样:
//Don't use this!!!
List<String> stringList = Arrays.asList("A", "D", "B", "E", "C");
List<String> reversedStringList = stringList.stream()
.sorted((a, b) -> -1)
.collect(Collectors.toList());
System.out.println(reversedStringList);
正数输出:
[c, e, b, d, a]
可能的输出在并行流或与其他JVM实现:
[a, e, b, d, c]