java.util.stream.Stream#sorted(java.util.Comparator<? super T>)
时间: 2023-12-09 19:02:49 浏览: 51
java.util.stream.Stream#sorted(java.util.Comparator<? super T>)是Java 8中Stream API提供的一个方法,用于对Stream中的元素进行自定义排序。该方法接收一个Comparator对象作为参数,用于比较Stream中的元素的大小关系。在排序完成后,该方法返回一个新的Stream对象,该对象包含排序后的元素。需要注意的是,该方法不会改变原有的Stream对象,而是生成一个新的Stream对象。
例如,假设有一个List<String>对象list,我们可以通过以下代码对其进行排序:
```
List<String> sortedList = list.stream()
.sorted((s1, s2) -> s1.compareTo(s2))
.collect(Collectors.toList());
```
在上面的代码中,我们首先将list转化为Stream对象,然后使用sorted方法对其进行排序,该方法接收一个Comparator对象,使用Lambda表达式实现字符串的比较。最后通过collect方法将排序后的结果保存到一个新的List中。
相关问题
java.util.stream.Stream#sorted(java.util.Comparator<? super T>) 如何定义正序和倒序
java.util.stream.Stream#sorted(java.util.Comparator<? super T>)方法可以接收一个Comparator对象作为参数,用于比较Stream中的元素的大小关系。我们可以通过实现Comparator接口来定义自己的比较器,从而实现正序或倒序排列。
如果我们希望按照元素的自然顺序进行排序,可以使用元素本身的compareTo()方法。例如,对于一个List<Integer>对象list,我们可以使用以下代码对其进行排序:
```
List<Integer> sortedList = list.stream()
.sorted()
.collect(Collectors.toList());
```
在上述代码中,我们没有传递Comparator对象,因此会使用元素自身的compareTo()方法进行比较,从而按照元素的自然顺序进行排序。
如果我们希望按照元素的降序排列,可以在Comparator对象的compare()方法中返回负数。例如,对于一个List<Integer>对象list,我们可以使用以下代码对其进行降序排列:
```
List<Integer> sortedList = list.stream()
.sorted((i1, i2) -> i2.compareTo(i1))
.collect(Collectors.toList());
```
在上述代码中,我们传递了一个Comparator对象,该对象使用i2.compareTo(i1)比较元素的大小关系,从而实现了降序排列。
t.stream().sorted 倒叙
以下是使用`stream().sorted()`方法进行倒序排序的示例:
```java
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
// 假设t是一个包含Order对象的列表
// 使用Comparator.reverseOrder()进行倒序排序
Comparator<Order> comparator = Comparator.comparing(Order::getDateStr, Comparator.reverseOrder());
List<Order> orderList = t.stream().sorted(comparator).collect(Collectors.toList());
System.out.println("orderList:" + orderList);
```
这段代码使用了`Comparator.reverseOrder()`来创建一个降序排序的比较器,然后将其传递给`sorted()`方法进行排序。最后,使用`collect(Collectors.toList())`将排序后的结果收集到一个新的列表中。