Jeśli mam List<List<Object>>
, w jaki sposób mogę zmienić to w List<Object>
zawierające wszystkie obiekty w tej samej kolejności iteracji, używając funkcji Java 8?
java
collections
java-8
Sarah Szabo
źródło
źródło
::
:)Class::method
na początku wydaje się trochę dziwny, ale ma tę zaletę, że deklaruje, z jakiego obiektu mapujesz. To jest coś, co inaczej tracisz w strumieniach.flatmap
jest lepszy, ale istnieją inne sposoby osiągnięcia tego samegoźródło
Ta
flatMap
metodaStream
może z pewnością spłaszczyć te listy, ale musi tworzyćStream
obiekty dla elementu, a następnieStream
dla wyniku.Nie potrzebujesz wszystkich tych
Stream
obiektów. Oto prosty, zwięzły kod do wykonania zadania.Ponieważ
List
jestIterable
to kod wywołuje sięforEach
metodę (Java 8 funkcji), który jest dziedziczonyIterable
.A
List
„sIterator
elementy powraca w kolejności.W
Consumer
tym przypadku kod przekazuje odwołanie do metody (funkcja Java 8) do metody wcześniejszej niż Java 8,List.addAll
aby sekwencyjnie dodawać wewnętrzne elementy listy.źródło
Możesz użyć
flatCollect()
wzorca z kolekcji Eclipse .Jeśli nie możesz zmienić listy z
List
:Uwaga: Jestem współtwórcą kolekcji Eclipse.
źródło
Tak jak wspomniano @ Saravana:
Podsumowując, istnieje kilka sposobów osiągnięcia tego samego, co następuje:
źródło
Chcę tylko wyjaśnić jeszcze jeden scenariusz jak
List<Documents>
ta lista zawiera kilka dodatkowych wykazów innych dokumentów, takich jakList<Excel>
,List<Word>
,List<PowerPoint>
. Więc struktura jestTeraz, jeśli chcesz iterować Excela tylko z dokumentów, zrób coś takiego jak poniżej.
Tak więc kod będzie
Mam nadzieję, że to rozwiąże czyjś problem podczas kodowania ...
źródło
Możemy użyć do tego płaskiej mapy, zapoznaj się z poniższym kodem:
źródło
Rozszerzenie odpowiedzi Erana, które było najlepszą odpowiedzią, jeśli masz kilka warstw list, możesz je nadal płasko odwzorowywać.
Jest to również przydatny sposób filtrowania podczas schodzenia po warstwach, jeśli to konieczne.
Na przykład:
W SQL byłoby to podobne do posiadania instrukcji SELECT w instrukcjach SELECT.
źródło
Metoda konwersji
List<List>
naList
:Zobacz ten przykład:
Drukuje:
źródło