我有一个“ First”类,其中包含对“ Second”类的引用作为列表。我正在尝试通过使用Stream(或)flap Map(或)groupingBy以Java 8的方式实现以下代码块
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));
我在这里缺少什么,请帮帮我
答案 0 :(得分:4)
您需要“记住”与每个Second
实例相对应的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));
实例来做到这一点:
PropertySourcesPlaceholderConfigurer