stream.sorted排序三个条件
时间: 2023-05-23 17:01:19 浏览: 126
可以使用comparator来实现,首先按照第一个条件进行排序,如果第一个条件相同,再按照第二个条件进行排序,如果第二个条件也相同,再按照第三个条件进行排序。具体实现可以参考以下代码:
stream.sorted(Comparator.comparingInt(obj -> obj.getFirstCriteria())
.thenComparingInt(obj -> obj.getSecondCriteria())
.thenComparingInt(obj -> obj.getThirdCriteria()))
.collect(Collectors.toList());
相关问题
stream().sorted 多个字段排序
可以使用 `Comparator` 的 `thenComparing()` 方法来对多个字段进行排序。假设我们有一个 `Person` 类,其中包含了 `name`、`age` 和 `height` 三个字段,代码如下:
```java
public class Person {
private String name;
private int age;
private int height;
// 构造函数、getter/setter 略
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
", height=" + height +
'}';
}
}
```
如果我们想要按照年龄升序、身高降序、姓名升序的顺序来排序,代码如下:
```java
List<Person> people = Arrays.asList(
new Person("Alice", 20, 170),
new Person("Bob", 25, 165),
new Person("Charlie", 30, 180),
new Person("David", 25, 175),
new Person("Eve", 20, 160)
);
List<Person> sortedPeople = people.stream()
.sorted(Comparator.comparing(Person::getAge)
.thenComparing(Comparator.comparing(Person::getHeight).reversed())
.thenComparing(Comparator.comparing(Person::getName)))
.collect(Collectors.toList());
sortedPeople.forEach(System.out::println);
```
输出结果如下:
```
Person{name='Alice', age=20, height=170}
Person{name='Eve', age=20, height=160}
Person{name='Bob', age=25, height=165}
Person{name='David', age=25, height=175}
Person{name='Charlie', age=30, height=180}
```
可以看到,按照我们的要求,先按照年龄升序排序,然后按照身高降序排序,最后按照姓名升序排序。使用 `thenComparing()` 方法可以实现多个字段的排序。
按条件多字段自定义排序.stream().sorted
您可以使用Java 8中的Stream的sorted()方法来按照多个字段进行自定义排序。下面是一个示例代码:
```java
List<Person> persons = ...; // 假设这是一个Person对象列表
List<Person> sortedPersons = persons.stream()
.sorted(Comparator.comparing(Person::getField1)
.thenComparing(Person::getField2)
.thenComparing(Person::getField3))
.collect(Collectors.toList());
```
在这个示例中,我们假设Person对象有三个字段:field1,field2和field3。我们使用sorted()方法,并传入一个Comparator对象来定义排序规则。Comparator.comparing()方法接受一个Function来提取比较的字段。然后,我们可以使用thenComparing()方法来定义多个字段的排序顺序。
请根据您的具体需求修改示例代码中的字段和排序规则。
阅读全文