文
章
目
录
章
目
录
自 Java 8 以来,sorted() 方法已成为 Stream API 的一部分,用于对流中的元素进行排序。默认情况下,元素按自然顺序排序,但我们可以使用 Comparator 来应用自定义顺序。
// 快速指引
//默认排序
List sortedList = unsortedList.stream().sorted().toList();
//自定义排序
Comparator comparator = ...;
List sortedList = unsortedList.stream().sorted(comparator).toList();
1. Stream sort() 是重载方法
Stream 接口提供了两个用于对元素进行排序的方法:
- sorted() – 提供默认排序
- sorted(Comparator) – 根据提供的比较器进行排序。
1.1Stream sorted()
Stream<T> sorted()
- sorted() 是一种有状态的中间操作,返回一个新的 Stream。
- 它返回由该流的元素组成的流,按自然顺序排序。
- 如果该流的元素不可比较,则在执行终端操作时可能会抛出 java.lang.ClassCastException。
- 对于有序流,排序是稳定的。
- 对于无序流,不保证稳定性。
1.2. Stream sorted(comparator)
Stream<T> sorted(Comparator<? super T> comparator)
- 这是一个有状态的中间操作,返回一个新的流。
- 它返回由该流的元素组成的流,根据提供的 Comparator 进行排序。
- 对于有序流,排序是稳定的。
- 对于无序流,不保证稳定性。
2. Stream sorted() 示例
2.1按自然顺序对流元素进行排序
在给定的 Java 示例中,我们按自然顺序对整数列表进行排序,并将其打印到标准输出中。
List<Integer> list = Arrays.asList(2, 4, 1, 3, 7, 5, 9, 6, 8);
List<Integer> sortedList = list.stream()
.sorted()
.collect(Collectors.toList());
System.out.println(sortedList); //[1, 2, 3, 4, 5, 6, 7, 8, 9]
2.2. 以相反的顺序对流元素进行排序
在给定的 Java 示例中,我们使用 Comparator.reverseOrder() 以相反的顺序对整数流进行排序,并将其打印到标准输出中。
List<Integer> list = Arrays.asList(2, 4, 1, 3, 7, 5, 9, 6, 8);
List<Integer> sortedList = list.stream()
.sorted(Comparator.reverseOrder())
.collect(Collectors.toList());
System.out.println(sortedList); //[9, 8, 7, 6, 5, 4, 3, 2, 1]
2.3. 使用 Comparator 在自定义顺序中对流元素进行排序
在给定的 Java 示例中,我们使用自定义 Comparator 对整数流进行排序并将其打印到标准输出中。
List<Integer> list = Arrays.asList(2, 4, 1, 3, 7, 5, 9, 6, 8);
Comparator<Integer> reverseComparator = new Comparator<Integer>() {
@Override
public int compare(Integer i1, Integer i2) {
return i2.compareTo(i1);
}
};
List<Integer> sortedList = list.stream()
.sorted(reverseComparator)
.collect(Collectors.toList());
System.out.println(sortedList); //[9, 8, 7, 6, 5, 4, 3, 2, 1]
2.4. 使用 Lambda 表达式进行 Stream 排序
使用 lambda 表达式来指定比较逻辑,Java 示例以相反的顺序对整数流进行排序。
我们正在使用内联 lambda 表达式重写先前的比较器逻辑。
List<Integer> list = Arrays.asList(2, 4, 1, 3, 7, 5, 9, 6, 8);
List<Integer> sortedList = list.stream()
.sorted( (i1, i2) -> i2.compareTo(i1) )
.collect(Collectors.toList());
System.out.println(sortedList); //[9, 8, 7, 6, 5, 4, 3, 2, 1]
3. 结论
在本 Java 8 Stream 教程中,我们学习了使用 sorted() 方法对流元素进行排序的基础知识。我们学习了按默认升序排序以及使用 Comparator 进行自定义排序。