L'une des API ajoutées à Java 8 qui vous permet d'écrire une programmation fonctionnelle telle que des expressions lambda.
Stream pourra collecter des collections, listes, etc. en un seul endroit et les traiter. A ce moment, lorsque le traitement intermédiaire et le traitement de terminaison sont terminés, le résultat traité est retourné afin que les données puissent être traitées plus facilement par soi-même.
Dans le code source d'Elastic Search
this.registry = new NamedXContentRegistry(
Stream.of(getDefaultNamedXContents().stream(), getProvidedNamedXContents().stream(), namedXContentEntries.stream())
.flatMap(Function.identity()).collect(toList()));
En regardant le code de, j'ai pensé qu'il s'agissait en quelque sorte de collecter quelque chose comme une liste et de le renvoyer finalement sous forme de liste, mais je le comprends un peu plus profondément pour étudier J'ai fait des recherches pour l'obtenir.
stream() Méthodes de type Liste, etc. Méthode qui crée un type Stream afin qu'il puisse être utilisé avec un type Stream.
Arrays.asList("one", "two", "three").stream();
Arrays.asList(new Moment(), new Moment(), new Moment(), new Moment()).stream();
Stream.of() Une méthode qui vous permet de créer une liste de type Stream à la fois.
List<String> numbers = Arrays.asList("one", "two", "three");
Stream.of(numbers.stream(), numbers.stream(), numbers.stream());
flatMap() Une méthode pour combiner une liste en une seule liste. Vous pouvez décrire le processus en utilisant forEach etc. dans cette méthode.
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() Une méthode qui renvoie la valeur telle quelle. Au début, je me demandais pourquoi il y avait quelque chose comme ça, mais il y avait de nombreuses raisons pour lesquelles c'était plus facile à lire si je pouvais écrire quelque chose comme «t-> t» comme une méthode ou «Function :: identity».
Stream.of(numbers.stream(), numbers.stream(), numbers.stream())
.flatMap(Funcion.indentity());
Ce stackoverflow était facile à comprendre.
collect() Une méthode qui renvoie comme type Collectors à la fin du traitement du flux. Vous pouvez décider quel type (liste, etc.) renvoyer dans cette méthode.
Stream.of(numbers.stream(), numbers.stream(), numbers.stream())
.flatMap(Funcion.indentity())
.collect(~);
Collectors.toList() Une méthode qui renvoie un type Collectors en tant que type List. Cela peut être utilisé dans la méthode de collecte.
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()));
Pour revenir au début, ce que fait le code ci-dessus est de transformer le type List en un type Stream, puis de les assembler dans Stream.of
, et d'utiliser flatMap
pour unifier le contenu de la liste. Après cela, collect
le transforme en type Collectors, et toList
le transforme finalement en type List et le renvoie (long).
La collection aurait pu être meilleure que l'expression de la liste.
En fait, j'ai posté le site que j'ai créé sur Qiita tel quel.
Je ne sais pas dans le futur, mais je le donnerai à Qiita.
Recommended Posts