stream().sorted 排序不生效如何解决
时间: 2023-11-18 17:46:28 浏览: 254
如果 `stream().sorted()` 排序没有生效,可能有以下几种原因:
1. 元素类型没有实现 `Comparable` 接口,或者 `Comparator` 没有正确实现。在这种情况下,排序操作会抛出 `ClassCastException` 异常。
2. 流已经被终止,例如已经执行了 `forEach`、`reduce`、`collect` 等终止操作,这时再执行排序操作是无效的。
3. 如果是并行流,排序操作可能会受到并行处理的影响,导致结果不正确。
解决方法:
1. 确保元素类型实现了 `Comparable` 接口,或者提供了正确的 `Comparator` 实现。
2. 确保排序操作在流被终止之前执行。
3. 如果是并行流,可以使用 `sequential()` 方法将其转换为顺序流,然后再执行排序操作。
示例代码:
```java
List<Integer> list = Arrays.asList(3, 1, 4, 1, 5, 9, 2, 6, 5, 3);
List<Integer> sortedList = list.stream()
.sorted()
.collect(Collectors.toList());
System.out.println(sortedList); // [1, 1, 2, 3, 3, 4, 5, 5, 6, 9]
List<Integer> parallelSortedList = list.parallelStream()
.sequential() // 转换为顺序流
.sorted()
.collect(Collectors.toList());
System.out.println(parallelSortedList); // [1, 1, 2, 3, 3, 4, 5, 5, 6, 9]
```
阅读全文