Преобразование объекта списка в пользовательскую карту с использованием объекта потока Java 8

#java #java-8 #java-stream

#java #java-8 #java-stream

Вопрос:

У меня есть класс «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));
  

Я здесь чего-то не хватает, пожалуйста, помогите мне

Комментарии:

1. Пожалуйста, уточните этот вопрос

Ответ №1:

Вам нужно «запомнить» First экземпляр, соответствующий каждому 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));
  

Комментарии:

1. Это то, что я ищу!!