gpt4 book ai didi

java - 基于 Java 值的 Zip 2 集合

转载 作者:行者123 更新时间:2023-12-02 12:18:39 24 4
gpt4 key购买 nike

我有 2 Collection一些对象的s AB有一个字段 key 。我想根据该字段压缩这 2 个集合,以获得具有相同 key 的对象 A 和 B 的元组。 .

来自:

Collection<A> a;
Collection<B> b;

致:

List<Pair<A, B>> ab; // where A and B have the same key field

我现在正在做的是构建一个 Map<KeyType, Pair<A, B>>手动并从中创建一个列表,但我确信有更好的方法来做到这一点。

编辑(解释我如何创建 map ):

Map<KeyType, Pair<A, B>> keyToAandB = new HashMap<>();

a.stream()
.forEach(aa -> keyToAandB.put(
aa.getKey(),
Pair.of(aa, null)));

b.stream()
.forEach(bb -> keyToAandB.put(
bb.getKey(),
Pair.of(
keyToAandB.get(bb.getKey()).getFirst(),
bb)));

最佳答案

与您的解决方案没有太大不同,但在我看来稍微干净一些:

Map<KeyType, A> keyToA = a.stream()
.collect(Collectors.toMap(A::getKey, Function.identity()));

List<Pair<A, B>> ab = b.stream()
.map(bb -> Pair.of(keyToA.get(bb.getKey()), bb))
.collect(Collectors.toList());

如果您愿意承受二次性能,您可以使用嵌套流:

List<Pair<A, B>> ab = a.stream()
.map(aa -> Pair.of(aa, b.stream()
.filter(bb -> bb.getKey().equals(aa.getKey()))
.findAny()
.get())) // will throw exception if missing
.collect(Collectors.toList());

关于java - 基于 Java 值的 Zip 2 集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45966010/

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