java stream().sorted多个条件
时间: 2023-10-13 10:09:41 浏览: 38
在Java 8中,可以使用Stream API的sorted方法对流中的元素进行排序。要按多个条件进行排序,可以使用Comparator的thenComparing方法。下面是一个示例代码:
假设我们有一个Person类,其中包含name、age和score属性:
```java
public class Person {
private String name;
private int age;
private int score;
public Person(String name, int age, int score) {
this.name = name;
this.age = age;
this.score = score;
}
// getter and setter methods
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
", score=" + score +
'}';
}
}
```
现在,我们要按照分数从高到低排序,如果分数相同,则按照年龄从小到大排序,如果年龄也相同,则按照姓名字典序排序。
可以使用以下代码来实现:
```java
List<Person> persons = Arrays.asList(
new Person("Tom", 25, 80),
new Person("John", 30, 70),
new Person("Mary", 20, 90),
new Person("Jack", 25, 80)
);
List<Person> sortedPersons = persons.stream()
.sorted(Comparator.comparingInt(Person::getScore).reversed()
.thenComparingInt(Person::getAge)
.thenComparing(Person::getName))
.collect(Collectors.toList());
System.out.println(sortedPersons);
```
输出结果如下:
```
[Person{name='Mary', age=20, score=90}, Person{name='Jack', age=25, score=80}, Person{name='Tom', age=25, score=80}, Person{name='John', age=30, score=70}]
```
可以看到,最终的结果按照分数从高到低排序,如果分数相同,则按照年龄从小到大排序,如果年龄也相同,则按照姓名字典序排序。