Jestem nowy w wyrażaniu lambda i próbowałem go użyć w moim zadaniu.Scalanie strumieni map za pomocą Java 8 Lambda Expression
Problem:
Mam dwie mapy m1
i m2
typu Map<Integer, String>
, który ma zostać włączony do jednej mapie Map<Integer, List<String>>
, gdzie wartości samych kluczy w obu mapach są gromadzone w formie listy i umieścić do nowej mapy.
Rozwiązanie opiera się na tym, co ja zbadałem:
Map<Integer, List<String>> collated =
Stream.concat(m1.entrySet().stream(), m2.entrySet().stream()).collect(
Collectors.toMap(Entry::getKey,
Entry::getValue, (a, b) -> {
List<String> merged = new ArrayList<String>(a);
merged.addAll(b);
return merged;
}));
Ale to rozwiązanie przewiduje źródło List
być Map<Integer, List<String>>
jako funkcja scalania w toMap spodziewa argumenty i wynik się być tego samego typu.
Nie chcę zmieniać kolekcji źródeł. Podaj swoje dane wejściowe, aby to osiągnąć, używając wyrażenia lambda.
Nie, to nie działa na mnie – viktor
@viktor Próbowałaś mój oryginalny odpowiedź (która nie przeszła kompilację) lub moją zaktualizowaną odpowiedź? – Eran
Dzięki Eran, to działa. Dla mojego zrozumienia - modyfikujemy program odwzorowujący wartości w celu utworzenia listy i korzystania z tej samej funkcji scalania scalania list. Dobrze? – viktor