当前位置: 首页 > 知识库问答 >
问题:

筛选到映射后收集到流的问题

潘银龙
2023-03-14

我有两个列表,我必须从它们创建一个地图。首先,我在迭代for loop,其次,我想通过一个stream和collect来映射,但我不知道在这种情况下如何使用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(???)));
        }
    }
}

共有1个答案

洪浩波
2023-03-14

您可以尝试使用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实例关联。

 类似资料:
  • 假设你有一张这样的物体地图(尽管想象它更大): rtype=133,有两个! 我想对Streams做的是这样的: 我在理解Collectors&groupBy的工作原理时遇到了一些麻烦,但我想这可能会用于本例。 在Java streams API中进行编码的正确方法是什么? 我很难找到类似的地图例子(人们在他们的例子中更多地使用列表)

  • 假设我有以下工作的lambda表达式: 我想在过滤器语句之前创建一个具有2个值的流。所以我想做一个映射,但仍然保留原始值。我想实现这样的事情: 这可能与Java8流?我已经看了收集(GroupingBy()),但仍然没有成功。

  • 我想从的中创建一个并在映射中使用相同的parentId映射列表中的所有条目,如。 我使用了但它不编译:

  • 我试图使用流API代替循环,并有以下问题。 我有一个方法,它接受一个Enum并返回一个SortedMap。我将每个映射存储在一个列表中,但是我现在希望将每个SortedMap存储在一个映射中,Enum名称为键,从返回的SortedMap作为值,如何使用流API执行此操作? 当前工作列表方法 我使用收集器的错误尝试。toMap。。 工作回路,工作回路

  • 我有这个代码: 它产生的是 很高兴我应该如何写映射方法来得到一个地图,它会给我: