按条件多字段自定义排序.stream().sorted
时间: 2023-07-21 18:04:35 浏览: 354
您可以使用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()方法来定义多个字段的排序顺序。
请根据您的具体需求修改示例代码中的字段和排序规则。
相关问题
aa.stream().sorted如何指定字段排序
`aa.stream().sorted()` 是Java中对集合进行流式处理时,对元素进行排序的一个方法。在这个序列化操作中,默认情况下会按照元素自然顺序(即对象的 `compareTo` 方法)进行升序排列。如果你想按照特定字段进行排序,你需要提供一个自定义的比较器(Comparator)。
例如,假设你有一个Person类,有两个属性:age和name,你可以这样指定按age字段降序或name字段升序排序:
```java
List<Person> people = ...; // 假设这是Person类型的列表
// 按照age字段降序排序
people.stream()
.sorted(Comparator.comparing(Person::getAge).reversed())
.collect(Collectors.toList());
// 或者按照name字段升序排序
people.stream()
.sorted(Comparator.comparing(Person::getName))
.collect(Collectors.toList());
```
这里的关键是通过 `comparing` 函数获取一个用于比较的方法引用,`reversed()` 可以改变排序方向为降序,如果不需要改变方向,则直接传入即可。
如果你想要在多个字段之间进行复合排序(比如先按年龄排序,然后按名字排序),你可以组合两个比较器:
```java
people.stream()
.sorted(
Comparator
.comparingInt(Person::getAge)
.thenComparing(Person::getName)
)
.collect(Collectors.toList());
```
上述代码首先根据age排序,如果有相同age,则再根据name排序。记得在构造比较器时,要确保它们能够正确配合你的数据类型和需求。
stream sorted 按照某一字段自定义规则排序,如以Name字段排序,内容为off的大于内容为no的
可以使用 Java 8 的 Stream API 中的 sorted 方法,结合 Comparator 接口实现自定义排序规则。具体实现可以参考以下代码:
List<Data> dataList = new ArrayList<>();
// 添加数据到 dataList 中
Comparator<Data> comparator = Comparator.comparing(Data::getName, (name1, name2) -> {
if ("off".equals(name1) && !"off".equals(name2)) {
return -1;
} else if (!"off".equals(name1) && "off".equals(name2)) {
return 1;
} else {
return name1.compareTo(name2);
}
});
List<Data> sortedList = dataList.stream().sorted(comparator).collect(Collectors.toList());
其中,Data 是数据对象,getName() 方法返回 Name 字段的值。Comparator.comparing() 方法用于指定按照哪个字段排序,第二个参数是一个 Lambda 表达式,用于实现自定义排序规则。在这个 Lambda 表达式中,如果 name1 的值为 "off",而 name2 的值不是 "off",则返回 -1,表示 name1 应该排在 name2 前面;如果 name1 的值不是 "off",而 name2 的值是 "off",则返回 1,表示 name1 应该排在 name2 后面;否则,按照默认的字符串比较规则进行排序。最后,使用 collect(Collectors.toList()) 方法将排序后的数据转换成 List。
阅读全文
相关推荐













