1:java stream list数据根据相同的键值 合并 Function.identity(),
在Java中,使用Stream API对List中的对象按照相同的键值进行合并,可以使用Collectors.toMap()
方法。以下是一个示例,假设我们有一个User
类,它有一个id
属性,我们希望按照id
进行合并。如下:
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
class User {
int id;
String name;
public User(int id, String name) {
this.id = id;
this.name = name;
}
// getters and setters
public int getId() {
return id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class MergeListItems {
public static void main(String[] args) {
List<User> users = Arrays.asList(
new User(1, "Alice"),
new User(2, "Bob"),
new User(1, "Alice1"), // 相同id的不同实例,应合并
new User(3, "Charlie")
);
Map<Integer, User> mergedUsers = users.stream()
.collect(Collectors.toMap(
User::getId, // key为用户的id
Function.identity(), // value为用户本身
(u1, u2) -> { // 如果key相同,合并用户
u1.setName(u1.getName() + "," + u2.getName());
return u1;
}
));
mergedUsers.values().forEach(user -> System.out.println(user.getId() + ": " + user.getName()));
}
}