list按照某个字段排序使用stream
时间: 2025-05-09 22:14:43 浏览: 20
### Java Stream API 对象字段排序
为了按照对象的特定字段对 `List` 进行排序,可以使用 Java 的 Stream API 结合 `sorted()` 方法以及 `Comparator.comparing()` 函数。下面展示了一个具体的例子:
假设有一个表示用户的类 `User` 和一个包含多个此类实例的列表。
```java
class User {
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
// Getters and setters...
@Override
public String toString() {
return "User{name='" + name + "', age=" + age + '}';
}
}
```
要基于年龄对用户列表进行升序排列,则可编写如下代码片段:
```java
import java.util.*;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<User> users = Arrays.asList(
new User("Alice", 30),
new User("Bob", 25),
new User("Charlie", 35)
);
List<User> sortedUsers = users.stream()
.sorted(Comparator.comparing(User::getAge))
.collect(Collectors.toList());
System.out.println(sortedUsers);
}
}
```
这段程序会输出按年龄从小到大排序后的用户列表[^1]。
如果需要降序排列,可以在创建比较器时添加 `.reversed()` 调用;而对于更复杂的多级排序需求,比如先依据年龄再根据名字首字母顺序来决定最终次序的情况,应该链式调用 `thenComparing()` 来指定额外的排序条件[^3]:
```java
// 多重排序:首先按年龄升序,其次按姓名字典序升序
List<User> multiSortedUsers = users.stream()
.sorted(Comparator.comparing(User::getAge).thenComparing(User::getName))
.collect(Collectors.toList());
```
阅读全文
相关推荐


















