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

时间:2019-03-18 07:34:01

标签: java java-8 java-stream

我有一个“ 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));

我在这里缺少什么,请帮帮我

1 个答案:

答案 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