Eine der in Java 8 hinzugefügten APIs, mit denen Sie funktionale Programmierung wie Lambda-Ausdrücke schreiben können.
Stream kann Sammlungen, Listen usw. an einem Ort sammeln und verarbeiten. Zu diesem Zeitpunkt, wenn die Zwischenverarbeitung und die Beendigungsverarbeitung abgeschlossen sind, wird das verarbeitete Ergebnis zurückgegeben, so dass die Daten für sich selbst einfacher verarbeitet werden können.
Im Elastic Search-Quellcode
this.registry = new NamedXContentRegistry(
Stream.of(getDefaultNamedXContents().stream(), getProvidedNamedXContents().stream(), namedXContentEntries.stream())
.flatMap(Function.identity()).collect(toList()));
Als ich mir den Code von ansah, dachte ich, dass dies irgendwie so etwas wie eine Liste sammelt und sie schließlich als Liste zurückgibt, aber ich verstehe es etwas tiefer für das Studium Ich habe einige Nachforschungen angestellt, um es zu bekommen.
stream() Methoden im Listentyp usw. Eine Methode, die einen Stream-Typ erstellt, damit er mit einem Stream-Typ verwendet werden kann.
Arrays.asList("one", "two", "three").stream();
Arrays.asList(new Moment(), new Moment(), new Moment(), new Moment()).stream();
Stream.of() Eine Methode, mit der Sie eine Stream-Typ-Liste gleichzeitig zusammenstellen können.
List<String> numbers = Arrays.asList("one", "two", "three");
Stream.of(numbers.stream(), numbers.stream(), numbers.stream());
flatMap() Eine Methode zum Kombinieren einer Liste zu einer einzelnen Liste. Sie können den Prozess mit forEach usw. in dieser Methode beschreiben.
Stream.of(list1.stream(), list1.stream(), list1.stream())
.flatMap(t -> t).forEach(t -> System.out.println(t)); // "one", "two", "three", "one", "two", "three", "one", "two", "three"
Stream.of(list1.stream(), list1.stream(), list1.stream())
.forEach(t -> System.out.println(t)); // reference values
Function.identity() Eine Methode, die den Wert unverändert zurückgibt. Zuerst habe ich mich gefragt, warum es so etwas gibt, aber es gab viele Gründe, warum es einfacher zu lesen ist, wenn ich so etwas wie "t-> t" wie eine Methode oder "Function :: identity" schreiben kann.
Stream.of(numbers.stream(), numbers.stream(), numbers.stream())
.flatMap(Funcion.indentity());
Dieser Stackoverflow war leicht zu verstehen.
collect() Eine Methode, die am Ende der Verarbeitung des Streams als Collectors-Typ zurückgegeben wird. Sie können entscheiden, welcher Typ (Liste usw.) in dieser Methode zurückgegeben werden soll.
Stream.of(numbers.stream(), numbers.stream(), numbers.stream())
.flatMap(Funcion.indentity())
.collect(~);
Collectors.toList() Eine Methode, die einen Collectors-Typ als Listentyp zurückgibt. Dies kann innerhalb der Erfassungsmethode verwendet werden.
Stream.of(numbers.stream(), numbers.stream(), numbers.stream())
.flatMap(Funcion.indentity())
.collect(toList());
this.registry = new NamedXContentRegistry(
Stream.of(getDefaultNamedXContents().stream(), getProvidedNamedXContents().stream(), namedXContentEntries.stream())
.flatMap(Function.identity()).collect(toList()));
Zurück zum Anfang: Der obige Code macht den Listentyp zu einem Stream-Typ, fügt sie dann in "Stream.of" zusammen und verwendet "flatMap", um den Inhalt der Liste zu vereinheitlichen. Danach schafft es collect
in den Collectors-Typ, und toList
schafft es schließlich in den List-Typ und gibt ihn zurück (long).
Die Sammlung war möglicherweise besser als der Ausdruck der Liste.
Eigentlich habe ich die Site, die ich gemacht habe, in Qiita gepostet.
Ich weiß es in Zukunft nicht, aber ich werde es Qiita geben.
Recommended Posts