Sauf indication contraire, ce livre est cité.
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.
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
}
});
Interface fonctionnelle: une interface avec une seule méthode abstraite
[Essayez] Vérifiez JavaDoc. Comparateur JavaDoc
L'interface fonctionnelle est remplacée par l'expression lambda
(argument) -> {traitement}
retour
et ondulé (quand il y a un processus)//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)
);
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
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
L'API Stream est une «API qui décrit quoi, pas comment».
Comment: traitement individuel
Quoi: Finalité du traitement
Stream API écrit le but sans écrire le traitement en boucle
Même idée que SQL.
//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);
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);
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();
JavaScript aussi. .. ..
Recommended Posts