gpt4 book ai didi

java - 在过滤器到映射后收集到流的问题

转载 作者:行者123 更新时间:2023-11-30 01:57:35 25 4
gpt4 key购买 nike

我有两个列表,我必须根据它们创建一个 map 。第一,我正在 for 循环中迭代,第二我想通过流抛出而不是收集到映射,但我不知道如何在特定情况下使用 Collectors.toMap。可能吗?

我已经提出了一个解决方案,但没有使用流,但是我很好奇是否可以做到这一点,如果可以,该怎么做?

public void findMatch(List<ObjectA> objectAList, List<ObjectB> objectBList) {
Map<ObjectB, ObjectA> objectBObjectAMap = new HashMap<>();
for (ObjectB objectB : objectBList) {
if (isNull(objectB.getHandoverTime())) {
objectBObjectAMap.putAll(
objectAList
.stream()
.filter(objectA -> {
ObjectC objectC = objectB.getObjectC();
return objectA.getNumber().equals(objectC.getNumber())
&& objectA.getQuality().equals(objectC.getQuality());
})
.collect(Collectors.toMap(???)));
}
}
}

最佳答案

您可以尝试使用flatMap:

Map<ObjectB, ObjectA> objectBObjectAMap =
objectBList.stream()
.filter(b -> isNull(b.getHandoverTime()))
.flatMap(b -> objectAList.stream()
.filter(a -> {
ObjectC c = b.getObjectC();
return a.getNumber().equals(c.getNumber()) &&
a.getQuality().equals(c.getQuality());
})
.map(a -> new SimpleEntry<>(b,a)))
.collect(Collectors.toMap(Map.Entry::getKey,Map.Entry::getValue));

这是假设每个 ObjectB 实例不会与多个 ObjectA 实例关联。

关于java - 在过滤器到映射后收集到流的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53863947/

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