Expression lambda Java apprise avec Comparator

J'écrirai un commentaire sur les expressions Java lambda.

Expression lambda Java

En premier lieu, les expressions lambda sont souvent utilisées dans les langages fonctionnels pour décrire des fonctions anonymes. Il est utilisé lors de la création d'une fonction temporaire, par exemple lors de la transmission d'une fonction à une fonction.

Il n'y a pas de fonction en Java (les méthodes sont toujours définies dans les classes). Par conséquent, les expressions Java lambda se comportent comme "créer et transmettre une instance d'une interface avec une seule méthode abstraite". Elle est limitée à une seule méthode car une expression lambda ne peut décrire qu'une seule expression et une interface avec plusieurs méthodes ne détermine pas l'expression de la méthode.

Comme méthode de description


(argument) -> {En traitement}

Écrire. Les parenthèses peuvent être omises s'il n'y a qu'un seul argument ou action.

Comme exemple concret, regardons la méthode sort de Collections. C'est une méthode qui trie sur le premier argument «Liste», mais si vous passez une instance de l'interface «Comparateur» au deuxième argument, la méthode «comparable» sera utilisée pour déterminer l'ordre de tri. Par exemple, si vous souhaitez trier une liste de chaînes (strList) par longueur de caractère, vous pouvez écrire une fonction anonyme comme suit.

Collections.sort(strList, new Comparator(){
    @Override
    public int compare(String s1, String s2) {
        return s1.length() - s2.length();
    }
})

Puisque la classe Comparator est une interface dans laquelle seule la méthode compare ** est définie, elle peut être réécrite comme suit avec une expression lambda.

List<String> strList = Arrays.asList("a","ccc","bb");
Collections.sort(strList, (s1, s2) -> s1.length() - s2.length());
System.out.println(strList); // [a, bb, ccc]

Interface fonctionnelle et références de méthodes

La méthode «compare» est définie dans la classe «Comparator» comme suit.

comparing(Function<? super T,? extends U> keyExtractor);

Le type d'argument est Fonction <? Super T,? Étend U>, qui est un type de ** interface fonctionnelle **. L'interface fonctionnelle est une interface qui peut utiliser des expressions lambda, et différents types sont disponibles. Cette fois, Function <? Super T ,? Extends U> indique que l'instance a un type avec un argument de T et une valeur de retour de U. T et U sont définis comme suit: <T,U extends Comparable<? super U>> Comparator<T>

T est le type d'instance à comparer. U est le type de champ à comparer. Par conséquent, cette interface fonctionnelle signifie que c'est une expression qui renvoie des informations U pour comparer des instances de T.

Si vous écrivez le traitement de Collections.sort plus tôt avec la méthode de comparaison, ce sera comme suit.

Collections.sort(strList, comparing(s -> s.length()));

La partie s-> s.length () signifie appeler la méthode length de l'instance de type String s, afin qu'elle puisse être réécrite avec ** method reference **. Une référence de méthode est une méthode de description qui facilite l'écriture du processus d'appel d'une méthode de cette classe pour une instance. Décrivez avec nom de classe :: nom de méthode. Si vous écrivez l'exemple précédent avec une référence de méthode, ce sera comme suit.

Collections.sort(strList, comparing(String::length));

référence (o1, o2) -> o1 --o2 Arrêtez les sorts! --Comment utiliser Composer dans Java 8 JavaDoc:Comparator

Recommended Posts

Expression lambda Java apprise avec Comparator
Comprendre les expressions lambda Java 8
À propos des expressions Java lambda
Expliquer les expressions lambda Java 8
[Java] Introduction à l'expression lambda
[Introduction à Java] À propos des expressions lambda
Gérez les exceptions avec fraîcheur avec les expressions lambda Java 8 et l'API Stream
Repenser les modèles de conception avec les expressions lambda Java8 et Stream --Builder pattern -
Ce que j'ai appris avec Java Gold
Ce que j'ai appris avec Java Silver
L'origine des expressions Java lambda
Comment utiliser les expressions Java lambda
J'ai essayé de résumer les expressions Java lambda
De nos jours, les expressions Java Lambda et l'API de flux
AWS Lambda (Lambda) Partie 1 avec Java pour démarrer maintenant
Gérez d'énormes JSON avec Java Lambda
Facile à parcourir avec les expressions régulières Java
Bonjour Java Lambda
[Java] Expression Lambda
Expression lambda Java
Interagir avec l'API de message LINE à l'aide de Lambda (Java)
[Java] Résumé de la façon d'omettre les expressions lambda
Comment utiliser le framework Java avec AWS Lambda! ??
Comment utiliser l'API Java avec des expressions lambda
Installez java avec Homebrew
Tri à l'aide du comparateur java
Changer de siège avec Java
Installez Java avec Ansible
Comment déployer Java sur AWS Lambda avec Serverless Framework
[Java Silver] Résumé des points liés aux expressions lambda
[Java] Trier la liste à l'aide de flux et d'expressions lambda
expression 1 de la table lambda neutre java
Quarkus enregistre Java Lambda! ??
Utiliser des expressions Java lambda en dehors de l'API Stream
Téléchargement confortable avec JAVA
Variations d'expressions lambda Java
Changer java avec direnv
Fonctionnalité d'expression lambda Java 8
mémo d'expression java lambda
Téléchargement Java avec Ansible
expression lambda java [écriture de notes]
Raclons avec Java! !!
Etudier Java 8 (expression lambda)
Premiers pas avec les anciens ingénieurs Java (Stream + Lambda)
Évaluer java8 ~ Type Lambda ~
Expression lambda Java à nouveau
Construire Java avec Wercker
Conversion Endian avec JAVA
Publiez régulièrement des images de tweets sur Twitter avec AWS Lambda + Java
Profitez de la programmation avec un style lambda et une interface fluide
Les expressions lambda Java (Kotlin / JVM) ne sont pas toujours des instances séparées
Créer un SlackBot avec AWS lambda et API Gateway en Java
Créer un multi-projet Java avec Gradle
Premiers pas avec Java Collection
Configuration Java avec Spring MVC
Authentification de base avec Java 11 HttpClient
Expérimentons l'expansion en ligne Java
Exécuter un lot avec docker-compose avec Java batch
[Template] Connexion MySQL avec Java