Преобразование объекта списка в пользовательскую карту с использованием объекта потока Java 8 - PullRequest
3 голосов
/ 18 марта 2019

У меня есть класс «Первый», который содержит ссылку на класс «Второй» в виде списка.Я пытаюсь добиться ниже блока в 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 Ответ

4 голосов
/ 18 марта 2019

Вам необходимо «запомнить» экземпляр 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));
...