Java 8 Stream 分组排序:按用户名分组并按分数排序
假设有一个User类,包含userName和score两个字段:
public class User {
private String userName;
private int score;
public User(String userName, int score) {
this.userName = userName;
this.score = score;
}
public String getUserName() {
return userName;
}
public int getScore() {
return score;
}
}
可以按照以下方式对User列表进行分组和排序:
List<User> userList = Arrays.asList(
new User('Bob', 90),
new User('Alice', 80),
new User('Bob', 70),
new User('David', 85),
new User('Alice', 95)
);
Map<String, List<User>> userMap = userList.stream()
.collect(Collectors.groupingBy(User::getUserName));
userMap.values().forEach(users -> users.sort(Comparator.comparingInt(User::getScore)));
userMap.forEach((userName, users) -> {
System.out.println('User name: ' + userName);
users.forEach(user -> System.out.println('Score: ' + user.getScore()));
});
首先使用stream的groupingBy方法按照userName进行分组,得到一个Map<String, List
原文地址: https://www.cveoy.top/t/topic/lKwe 著作权归作者所有。请勿转载和采集!