[JAVA] Mémo API Stream

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.

Exemple de flux

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());

Description du premier code

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.

C'est une punch line ...

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

Mémo API Stream
Memo Stream
API Java Stream
Principes de base de l'API Stream
API Stream (classe Collectors)
[Java] API / carte de flux
Méthode de mappage de l'API Stream
Pratique de l'API Java8 Stream
Aide-mémoire de l'API Java Stream
API Java Stream en 5 minutes
[Java] Stream API - Traitement de l'arrêt du flux
[Java] Stream API - Traitement intermédiaire de flux
[Java] Introduction à l'API Stream
[Java] Opération intermédiaire de l'API Stream
[java8] Pour comprendre l'API Stream
[Introduction à Java] À propos de l'API Stream
Mémo API Niconico (Voyons voir et imitons)
Créez une alternative à l'API Stream facile à étendre
J'ai essayé d'utiliser l'API Java8 Stream
Mémo pour la création d'API Niconico (Matériaux)
Java 8 ~ Stream API ~ pour commencer maintenant
Mémo entier
API Rails
Appeler l'API [Appel]
Traitement des données à l'aide de l'API de flux de Java 8
Mémo de Lombok
Essayez d'utiliser l'API Stream en Java
Mémo Dockerfile
De nos jours, les expressions Java Lambda et l'API de flux
Mémo Itérateur
mémo corretto
Jeu d'Ogawa
Mémo Java
Mémo AWS
Essayez différentes méthodes d'API Java Stream (maintenant)
Processus de terminaison de flux
Classe anonyme (visant à introduire l'API de flux)
J'ai essayé de résumer l'API Stream
Remarques sur l'API Stream et SQL de Java
Mémo Dcokerfile
[Pour les débutants] À propos des expressions lambda et de l'API Stream