[Session d'étude interne] Principes de base de l'expression Java-Lambda et de l'API Stream- (13/07/2017)

0. Introduction


Ce que je veux dire

Connaissances préalables


Livres de référence

Java本格入門.jpg "Introduction à Java -Des bases du style moderne aux bibliothèques orientées objet et pratiques "Technical Review Company

Sauf indication contraire, ce livre est cité.


table des matières


1. Type Lambda


Qu'est-ce qu'une expression lambda?

Les expressions Lambda sont des notations puissantes, comme si vous pouviez passer le processus lui-même à un argument de méthode, etc.

List<Integer> list = new ArrayList<Integer>();
Collections.addAll(list, 3, 2, 1, 4, 5);

//Écriture sans expression lambda (classe anonyme)
Collections.sort(list, new Comparator<Integer>() {
	@Override
	public int compare(Integer o1, Integer o2) {
		return Integer.compare(o1, o2);
	}
});

//Comment écrire à l'aide d'une expression lambda
Collections.sort(list,
		(o1, o2) -> Integer.compare(o1, o2)
);

L'expression lambda est simplement «facile à écrire une méthode d'implémentation d'une classe anonyme», mais lorsqu'elle est combinée avec l'API Stream décrite plus loin, elle peut être écrite d'une manière facile à comprendre.


[Supplément] Classe anonyme

Souvent utilisé dans les paramètres de l'écouteur d'événements.

//Comment écrire lors de la définition d'un événement de clic sur Android
findViewById(R.id.hogehoge).setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        //Traitement au moment du clic
    }
});

Utiliser comme alternative aux interfaces fonctionnelles


Grammaire de base des expressions lambda

//Grammaire de base des expressions lambda
Collections.sort(list,
		(Integer o1, Integer o2) -> {
           return Integer.compare(o1, o2);
        }
);

//Omettre le type d'argument
Collections.sort(list,
		(o1, o2) -> {
           return Integer.compare(o1, o2);
        }
);

//Type d'argument, retour et crochets ondulés omis
Collections.sort(list,
		(o1, o2) -> Integer.compare(o1, o2)
);

Référence de la méthode

La méthode elle-même peut également être attribuée.

List<String> list = Arrays.asList("X", "Y", "Z");
//Comment écrire à l'aide de références de méthode
list.forEach(System.out::println);

//Comment écrire à l'aide d'une expression lambda
list.forEach(str -> System.out.println(str));

L'argument de la méthode forEach est une interface de type de fonction appelée java.util.function.Consumer.


2.Stream API


Qu'est-ce que l'API Stream?

L'API Stream a été introduite pour décrire efficacement le "traitement de flux" qui traite séquentiellement de grandes quantités de données.

List<Integer> list = Arrays.asList(100, 60, 30, 50, 70);

list.stream() //Instanciation de flux
    .filter(s -> s>=70) //Opération intermédiaire.//Extrait plus de 70.
    .forEach(s -> System.out.println(s)); //Opération de terminaison.

Afficher l'image du flux TODO


Fonctionnalités de l'API Stream

L'API Stream est une «API qui décrit quoi, pas comment».


Classification des API de flux

Liste des API de flux


API pour créer un flux

//Créer un flux à partir d'une liste ou d'un ensemble
List<Integer> list = Arrays.asList(100, 60, 30, 50, 70);
list.stream() //Instanciation de flux
    .forEach(System.out::println);
    

//Créer un flux à partir d'une plage numérique
IntStream.range(1, 5) //N'inclut pas la fin
    .forEach(System.out::println);

IntStream.rangeClosed(1, 5) //Y compris la fin
    .forEach(System.out::println);


Opérations intermédiaires sur Stream

List<Integer> list = Arrays.asList(10, 6, 3, 5, 7);

//map:Remplacer l'élément par une autre valeur
list.stream()
    .map(s -> s * s)
    .forEach(System.out::println);
    
//filter:Affinez uniquement les éléments qui correspondent aux conditions
list.stream()
    .filter(s -> s>=7)
    .forEach(System.out::println);

//sort:
list.stream()
    .sorted((s1,s2) -> s2 - s1) //Ordre décroissant
    .forEach(System.out::println);


Opération de terminaison pour Stream

List<Integer> list = Arrays.asList(10, 6, 3, 5, 7);

//forEach:Agir sur un élément
list.stream()
    .forEach(System.out::println);
    
//collect:Créer des résultats
List<Integer> newList = list.stream()
    .filter(s -> s>=7)
    .collect(Collectors.toList());

//average:Renvoie la moyenne(Opération d'agrégation)
list.stream()
    .average();


Langage fonctionnel

JavaScript aussi. .. ..

Recommended Posts

[Session d'étude interne] Principes de base de l'expression Java-Lambda et de l'API Stream- (13/07/2017)
[Session d'étude interne] Gestion des exceptions Java (2017/04/26)
Résumé de la session d’étude interne des recrues [Java]
De nos jours, les expressions Java Lambda et l'API de flux
API Java Stream
[Java] API / carte de flux
Pratique de l'API Java8 Stream
[Session d'étude interne] Bases de l'annotation Java (2017/11/02) ~ En construction ~
Etudier Java # 2 (\ marque et opérateur)
Aide-mémoire de l'API Java Stream
API Java Stream en 5 minutes
Flux Java8, résumé de l'expression lambda
[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
Gérez les exceptions avec fraîcheur avec les expressions lambda Java 8 et l'API Stream
[Milight Design In-house Study Group # 5] Lisez docker-compose.yml et Dockerfile ligne par ligne
[Mémo de la session d'étude] Java Day Tokyo 2017
J'ai essayé d'utiliser l'API Java8 Stream
Étude de Java # 5 (répétition et boucle infinie)
Java 8 ~ Stream API ~ pour commencer maintenant
Java8 / 9 Beginners: Streaming API addiction points et comment les gérer
Rejoignez une session d'étude de programmation amusante et amusante!
Traitement des données à l'aide de l'API de flux de Java 8
Essayez d'utiliser l'API Stream en Java
Etude Java n ° 3 (conversion de type et exécution d'instruction)
[Session d'étude interne] Introduction du "Code lisible"
Essayez différentes méthodes d'API Java Stream (maintenant)
Remarques sur l'API Stream et SQL de Java
J'ai examiné l'expression lambda de Java, l'API de flux, six mois après avoir commencé Java.
Créer une API à l'aide de Retrofit2, Okhttp3 et Gson (Java)
Instruction de commutation Java et pause, Kotlin lorsque l'expression ...
Mémo de la session d'étude: Kansai Java Engineers Association 8/5 - Selenium
Comment utiliser l'API Java avec des expressions lambda
Comment obtenir et étudier Java SE8 Gold
Java 8 pour démarrer maintenant ~ for Each et expression lambda ~
[Pour les débutants] À propos des expressions lambda et de l'API Stream
Repenser le modèle d'expression et de conception de flux Java8 Lambda - Modèle de commande -