stream().sorted 如何指定字段进行排序
时间: 2023-10-13 20:09:39 浏览: 85
在使用 `stream().sorted()` 进行排序时,可以通过传入一个 `Comparator` 对象来指定按照哪个字段进行排序。例如,如果有一个包含多个对象的列表,每个对象都有一个 `age` 属性,可以按照年龄进行排序,代码如下:
```
List<Person> personList = ...;
List<Person> sortedList = personList.stream()
.sorted(Comparator.comparingInt(Person::getAge))
.collect(Collectors.toList());
```
这里的 `Person::getAge` 是一个方法引用,表示按照 `Person` 类中的 `getAge()` 方法返回的值进行排序。如果需要按照其他字段进行排序,只需要替换掉方法引用即可。
相关问题
stream.sorted 按照某个字段排序
`stream.sorted()` 可以对一个 Stream 中的元素进行排序,默认是按照自然顺序进行排序。如果想要按照某个字段排序,可以使用 `sorted()` 的重载方法,该方法接收一个 Comparator 参数,用来指定排序的方式。
以一个对象列表为例,假设这个对象有一个属性叫做 "age",我们想要按照年龄从小到大排序,可以这样写:
```java
List<Person> personList = new ArrayList<>();
// 添加一些 Person 对象到列表中
List<Person> sortedList = personList.stream()
.sorted(Comparator.comparingInt(Person::getAge))
.collect(Collectors.toList());
```
在这个例子中,`Comparator.comparingInt(Person::getAge)` 指定了按照 age 属性进行排序,然后将排序结果收集到一个新的列表中。
如果需要按照多个字段进行排序,可以使用 `thenComparing()` 方法进行链式调用,例如:
```java
List<Person> sortedList = personList.stream()
.sorted(Comparator.comparingInt(Person::getAge)
.thenComparing(Person::getName))
.collect(Collectors.toList());
```
这个例子中,先按照 age 进行排序,如果 age 相同则按照 name 进行排序。
stream.sorted按某个字段排序
可以使用lambda表达式来指定按照哪个字段排序,例如:
stream.sorted((a, b) -> a.getField().compareTo(b.getField()))
其中,getField()是获取对象某个字段的方法,可以根据具体情况进行替换。
阅读全文