Ich habe die folgende Situation
Map<Key, ListContainer> map;
public class ListContainer{
List<AClass> lst;
}
Ich muss alle Listen lst
aus den ListContainer
Objekten einer Map
Karte zusammenführen.
public static void main(String args[]){
List<AClass> alltheObjectsAClass = map.values().stream(). // continue....
}
Irgendeine Idee, wie man die Java 8-Stream-API verwendet?
java
list
java-8
java-stream
mat_boy
quelle
quelle
{a: [1,2], b[3,4]}
: Möchten Sie sie verketten[1,2,3,4]
, eine Liste mit Listen[[1,2],[3,4]]
erstellen oder sie komprimieren[[1,3],[2,4]]
? Sie wissen auch, dass eine Karte keine Reihenfolge hat, oder?[1,2,3,4]
unsortiert ist!ListContainer
nur ein hüllt ,List<T>
dann können Sie ersetzenMap<Key, ListContainer>
mitMap<Key, List<T>>
Antworten:
Ich denke, das
flatMap()
ist was du suchst.Zum Beispiel:
quelle
.flatMap(Collection::stream)
dies hier nicht möglich ist?ListContainer
gekapselt ist (dh einen Getter für hatlst
), können Sie sich.flatMap(->)
in.map(ListContainer::getLst)
.flatMap(Collection::stream)
.flatMap(Collection::stream)
nicht möglich ist, wäre besser, denke ich. Sollte dauerhafter sein..map(listContainer -> listContainer.lst).filter(Objects::nonNull).flatMap(Collection::stream)
Alternative: Stream.concat ()
quelle
In Java 8 können wir stream List1.stream () verwenden. Collect (Collectors.toList ()). AddAll (List2); Eine weitere Option List1.addAll (List2)
quelle