gpt4 book ai didi

java - 如果对象具有相同的字段,如何过滤和组合对象

转载 作者:行者123 更新时间:2023-11-30 06:41:09 25 4
gpt4 key购买 nike

我已尝试解决问题,但遇到困难。我有类用户:

public class User {

public String name;
public String email;
public Integer age;
public String group;

public User() {
}

public User(String name, String email, Integer age, String group) {
this.name = name;
this.email = email;
this.age = age;
this.group = group;
}
}

用户列表如下:

List<User> users = new ArrayList<>();
users.add(new User("Max" , "test@test", 20 , "n1"));
users.add(new User("John" , "list@test", 21 , "n2"));
users.add(new User("Nancy" , "must@test", 22 , "n3"));
users.add(new User("Nancy" , "must@test", 22 , "n4"));
users.add(new User("Max" , "test@test", 20 , "n5"));

但此列表包含仅在组中有所不同的重复对象。所以我需要将重复对象组合成新对象,如下所示:

User: name: "Max", email: "test@test" , age: 20, groups: "n1, n5"

User: name: "John", email: "list@test" , age: 21, groups: "n2"

User: name: "Nancy", email: "must@test" , age: 22, groups: "n3, n4"

我知道我需要使用 Java 8 中的 steam,但不明白具体如何操作。

求助

最佳答案

你可以利用 toMap 收集器,因为它有一个合并功能,可以加入你的重复对象,例如我会在每次找到重复对象时创建一个新对象,但你可以修改现有对象

static User join(User a, User b) {
return new User(a.getName(), a.getEmail(), a.getAge(), a.getGroup() + "," + b.getGroup());
}

和流操作。

List<User> collect = users.stream()
.collect(Collectors.collectingAndThen(Collectors.toMap(User::getEmail,
Function.identity(),
(a, b) -> join(a, b)),
map -> new ArrayList<>(map.values())));

关于java - 如果对象具有相同的字段,如何过滤和组合对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56167125/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com