Aus der Liste von zwei Ganzzahlen Generieren Sie eine Liste von "Paaren", die eine Kombination aller Elemente voneinander sind.
ex.) [1,2,3], [5,6] -> [(1,5),(1,6),(2,5),(2,6),(3,5),(3.6)]
trial1 Vielleicht kann ich mit einer Karte gehen.
List<Integer> ints1 = Arrays.asList(1,2,3);
List<Integer> ints2 = Arrays.asList(5,6);
ints1.stream()
.map( i -> ints2.stream().map( j -> Pair.of(i,j)))
.collect(toList());
Nicht gut.
List <Stream <Pair <Integer, Integer >>
wird zurückgegeben.
An erster Stelle ...
Die Stream.map-Funktion nimmt den Typ Function <? Super T ,? Erweitert R>
als Argument und gibt <R> Stream <R>
zurück.
Stream map(Function<? super T,? extends R> mapper) ref. Stream.map
Die verschachtelte Karte ist also
Gibt Stream <Pair <Integer, Integer >>
und zurück
Die ursprüngliche Karte, die den Rückgabewert erhalten hat
Es wird "Stream <Stream <Pair <Integer, Integer >>>" zurückgegeben.
Und durch die Kündigungsoperation
List <Stream <Pair <Integer, Integer >>
wird schließlich zurückgegeben.
(In Zukunft geht es darum, was die Beendigungsoperation tut ...)
Mit flatMap Ersetzen Sie jeden Wert von Stream durch einen anderen Stream. Alle generierten Streams werden zu einem einzigen Stream zusammengefasst. ref. Java8 in Action
Per Definition
Als Argument an flatMap übergeben
Das zweite Argument von "Funktion <? Super T ,? Erweitert Stream <? Erweitert R >> Mapper" ist
Es ist ? Erweitert Stream <? Erweitert R>
Der Rückgabewert ist
Es ist vom Typ R <R> Stream <R>
, der den Stream des zweiten Funktionsarguments bildet.
Stream flatMap(Function<? super T,? extends Stream<? extends R>> mapper) ref. flatMap
Basierend auf dem oben Gesagten lautet der Code wie folgt.
ints1.stream()
.flatMap( i -> ints2.stream().map( j -> Pair.of(i,j)))
.collect(toList());
flatMap( i -> ints2.stream().map( j -> Pair.of(i,j)))
Der von zurückgegebene Typ
Mit Stream <Pair <Integer, Intege >>
,
Die Beendigungsoperation gibt "List <Pair <Integer, Integer >>" zurück.
Mit flatMap Es fühlt sich so an, als würde es Stream, der in trial1 verschachtelt war, gut machen ^^ (Erklärung Sonstiges)
Recommended Posts