java stream 在第一个排序的基础上进行第二个排序
时间: 2023-08-04 17:33:05 浏览: 80
可以使用`thenComparing()`方法来在第一个排序的基础上进行第二个排序。该方法接收一个函数(lambda表达式或方法引用)作为参数,返回一个`Comparator`对象。例如,如果我们要对一个`List`中的`Person`对象先按年龄排序,再按姓名排序,可以这样写:
```java
List<Person> personList = new ArrayList<>();
// 添加Person对象到列表中
Comparator<Person> ageComparator = Comparator.comparingInt(Person::getAge);
Comparator<Person> nameComparator = Comparator.comparing(Person::getName);
personList.stream()
.sorted(ageComparator.thenComparing(nameComparator))
.forEach(System.out::println);
```
以上代码中,我们先定义了按年龄排序的`Comparator`对象`ageComparator`和按姓名排序的`Comparator`对象`nameComparator`,然后在`sorted()`方法中使用`thenComparing()`方法将它们组合起来,实现了先按年龄排序,再按姓名排序的功能。
相关问题
java stream 排序
Java Stream 提供了一个 sort() 方法用于对流中的元素进行排序。sort() 方法可以接受一个 Comparator 参数,也可以使用默认排序规则。
下面是一个示例代码,演示如何使用 Java Stream 进行排序:
```java
List<String> list = Arrays.asList("apple", "banana", "orange", "pear");
List<String> sortedList = list.stream().sorted().collect(Collectors.toList());
System.out.println(sortedList); // 输出 [apple, banana, orange, pear]
List<Integer> numbers = Arrays.asList(3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5);
List<Integer> sortedNumbers = numbers.stream().sorted((a, b) -> a.compareTo(b)).collect(Collectors.toList());
System.out.println(sortedNumbers); // 输出 [1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]
```
第一个例子中,我们使用默认排序规则对字符串列表进行排序。第二个例子中,我们使用自定义比较器对整数列表进行排序。在自定义比较器中,我们使用 compareTo() 方法对整数进行比较。
java stream 第一个条件倒序 第二个条件倒序 结果 第一个条件变成顺序
可以使用`Comparator`接口的`reversed()`方法对条件进行倒序排序,然后使用`thenComparing()`方法添加第二个条件,最后再次使用`reversed()`方法对第二个条件进行倒序排序,最后使用`reversed()`方法对第一个条件进行顺序排序,示例如下:
```java
list.stream()
.sorted(Comparator.comparingInt(MyObject::getFirstAttr).reversed()
.thenComparing(Comparator.comparingInt(MyObject::getSecondAttr).reversed())
.reversed())
.collect(Collectors.toList());
```
其中,`MyObject`是一个自定义的对象,`getFirstAttr()`和`getSecondAttr()`是其两个属性的getter方法。这段代码中,首先按照第一个条件进行倒序排序,然后再按照第二个条件进行倒序排序,最后再次对第一个条件进行顺序排序。
阅读全文