使用Java 8 stream对象将列表对象转换为自定义Map

4

我有一个类"First",其中包含对类"Second"的引用列表。我正在尝试使用Java 8中的Stream(或)flap Map(或)groupingBy来以更加简洁的方式实现下面的代码块。

foreach(First a: listOfFirst){
    for (Second b: a.getSecondDetails()) {
        inputMap.put(b, a);
    }
}

我尝试了以下简化的方法。
listOfFirst.stream()
    .flatMap(p -> p.getSecondDetails().stream())
    .collect(Collectors.toMap(p -> p, q -> q));

我这里缺少一些东西,请帮忙解决。


请详细阐述这个问题。 - Lova Chittumuri
1个回答

4

您需要“记住”每个Second实例对应的First实例。 例如,您可以通过创建Map.Entry实例来实现:

Map<Second,First> result =
    listOfFirst.stream()
               .flatMap(p->p.getSecondDetails()
                            .stream()
                            .map(sec -> new SimpleEntry<>(sec,p))
               .collect(Collectors.toMap(Map.Entry::getKey,
                                         Map.Entry::getValue));

这就是我正在寻找的!! - Arun

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接