gpt4 book ai didi

java-8 - Java 8 流合并部分重复

转载 作者:行者123 更新时间:2023-12-01 11:17:47 26 4
gpt4 key购买 nike

我有一个看起来像这样的 POJO:

public class Account {
private Integer accountId;
private List<String> contacts;
}

equals 和 hashCode 方法设置为使用 accountId字段来标识唯一性,因此任何具有相同 accountId 的帐户不管怎样都是平等的 contacts包含。

我有一个帐户列表,并且有一些重复的相同 accountId .如何使用 Java 8 Stream API 将这些重复项合并在一起?

例如,帐户列表包含:
+-----------+----------+
| accountId | contacts |
+-----------+----------+
| 1 | {"John"} |
| 1 | {"Fred"} |
| 2 | {"Mary"} |
+-----------+----------+

我希望它生成这样的帐户列表:
+-----------+------------------+
| accountId | contacts |
+-----------+------------------+
| 1 | {"John", "Fred"} |
| 2 | {"Mary"} |
+-----------+------------------+

最佳答案

使用 Collectors.toMap引用:https://docs.oracle.com/javase/8/docs/api/java/util/stream/Collectors.html#toMap-java.util.function.Function-java.util.function.Function-java.util.function.BinaryOperator-

@lombok.Value
class Account {
Integer accountId;
List<String> contacts;
}

List<Account> accounts = new ArrayList<>();
//Fill
List<Account> result = new ArrayList<>(accounts.stream()
.collect(
Collectors.toMap(Account::getAccountId, Function.identity(), (Account account1, Account account2) -> {
account1.getContacts().addAll(account2.getContacts());
account2.getContacts().clear();
return account1;
})
)
.values());

关于java-8 - Java 8 流合并部分重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48413789/

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