Notes sur la façon dont les nouveaux SI peuvent utiliser (pas dire) les expressions lambda Java 8 Voici une liste des problèmes qui se sont produits avant de commencer à l'utiliser. En gros, je l'ai trouvé facile à utiliser grâce à Stream.
Les expressions Lambda sont une fonctionnalité ajoutée depuis Java 8 Vous l'entendrez souvent avec la programmation fonctionnelle et Stream.
Peu de temps après avoir compris les instructions if et for, j'ai appris l'existence des expressions lambda et de la programmation fonctionnelle.
L'impression franche à cette époque ** "Qu'est-ce que c'est, je n'en ai aucune idée." **
Dans mon cas, 3 points
** 1. Je ne comprends pas la signification du mot expression lambda ** ** 2. Je ne comprends pas les avantages de l'expression lambda ** ** 3. Je ne sais pas comment écrire une expression lambda **
A été mentionné.
Le mot lambda doit être ** inconnu de la personne moyenne **. Si vous recherchez une expression lambda, le wiki japonais
Les expressions Lambda sont étroitement liées aux calculs lambda et sont particulièrement populaires dans les langages fonctionnels.
Est écrit. Non, qu'est-ce que le calcul lambda?
HelloWorldLambda.java
public class Main {
public static void main(String[] args) {
Runnable r = () -> System.out.println("Hello World");
r.run(); // Hello World
}
}
Ceci est un exemple de Hello World commun.
Moi à ce moment "Habituellement System.out.println (" Hello World "); N'est-ce pas juste une question de faire ...?" Je pensais.
C'est vrai. Cet exemple est ** destiné à utiliser des expressions lambda **. Maintenant, vous ne savez pas quels sont les avantages de l'utilisation des expressions lambda.
ExLambda.java
Runnable r = () -> System.out.println("Hello World");
Les expressions Lambda sont décrites avec la syntaxe (argument formel) -> {process}. De nombreuses parties peuvent être omises de l'expression lambda, ce qui est également une raison pour les débutants de ne pas comprendre.
Le problème est que je n'ai jamais vu -> en Java que j'ai appris jusqu'à présent. De plus, le contenu de () est vide même si on dit qu'il s'agit d'un argument formel dans l'exemple ci-dessus.
Où sont passés ces gars {}? Qu'est-ce que cela remplace ** r? ** **
Les expressions Lambda sont une fonctionnalité ajoutée dans Java 8, Dans le même temps, une fonction appelée ** Stream API ** a été ajoutée.
C'est exactement la fonction pour utiliser l'expression lambda, Au contraire, pour rendre l'API Stream plus facile à utiliser Il n'est pas exagéré de dire que l'expression lambda a été implémentée. (Je pense que cela inclut divers facteurs tels que le renforcement de l'inférence de type)
Cela m'a donné une image de la façon d'utiliser le style lambda.
Je vais expliquer avec un exemple rapide.
ExIterable.java
public class ExIterable {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("Apple");
list.add("Banana");
list.add("Cherry");
list.forEach(s -> System.out.println(s));
// Apple
// Banana
// Cherry
}
}
Dans cet exemple, le contenu de la liste avec Apple, Banana et Cherry comme éléments est affiché respectivement. L'expression lambda est utilisée ici
list.forEach(s -> System.out.println(s));
Voilà la partie.
Traduit en japonais ** Regroupez le contenu de la liste en s un par un et affichez le contenu de la liste un par un avec System.out.println (s). ** ** Cela signifie que.
Avez-vous déjà entendu quelque chose de similaire?
C'est vrai ** Extended for statement **.
for (String s : list) {
System.out.println(s);
}
L'instruction for étendue ci-dessus donne le même résultat que celui utilisant l'expression lambda ci-dessus.
Pour l'instant, ** les expressions Lambda sont une alternative aux instructions for étendues! J'ai pu comprendre une utilisation de **. Si vous connaissez même un seul endroit où vous pouvez l'utiliser, il sera plus facile à comprendre à partir de là.
Cependant, cela seul ne montre pas les avantages de l'utilisation de la formule lambda. Prolongé pour la déclaration, c'est bien! Cela deviendra.
Maintenant, affichons le total des nombres en utilisant une liste avec ["1", "2", "3"] comme éléments. Comme il est stocké sous la forme de String, il doit être analysé en int, etc.
ExForEachSum.java
public class ExForEachSum {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("1");
list.add("2");
list.add("3");
System.out.println(list); // [1, 2, 3]
int sum = 0;
for (String s : list) {
sum += Integer.parseInt(s);
}
System.out.println(sum); // 6
}
}
Il est nécessaire de préparer les variables avant l'instruction for, telles que int sum = 0. Cela prend plus de temps que la simple sortie comme avant, comme la nécessité d'ajouter l'instruction for.
Écrivons ceci en utilisant Stream et une expression lambda.
ExStreamSum.java
public class ExStreamSum {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("1");
list.add("2");
list.add("3");
System.out.println(list); // [1, 2, 3]
int sum = list.stream() //Convertir la liste en flux
.mapToInt(s -> Integer.parseInt(s)) //Convertir le flux en IntStream
.sum(); //Additionner les éléments convertis en int
System.out.println(sum); // 6
}
}
Ici, mapToInt est une méthode qui convertit l'élément reçu en int et Stream en IntStream. Et vous devez ** comment convertir l'élément en int ** dans cet argument. Comme vous le savez peut-être déjà, Le ou les s-> Integer.parseInt (s) décrits ici sont une expression lambda qui montre comment transformer un élément. La chaîne de caractères reçue en tant qu'argument formel est analysée à l'aide de Integer.parseInt.
Vous pouvez le convertir en int et passer l'élément, alors essayez de le tripler comme indiqué ci-dessous
int sum = list.stream()
.mapToInt(s -> {
int num = Integer.parseInt(s);
return num * 3;
})
.sum();
System.out.println(sum); // 18
Vous pouvez également réduire le contenu de l'élément à 100 pour le moment.
int sum = list.stream()
.mapToInt(s -> {
return 100; //Je vais vous donner 100 pour le moment
})
.sum();
System.out.println(sum); // 300
Je vais omettre les détails, mais En outre, vous pouvez trier en utilisant trié et comparateur, Vous pouvez utiliser le filtre pour filtrer En apprenant via Stream, j'ai appris à utiliser l'expression lambda.
À propos de l'API Stream Introduction à l'API Java Stream On pense que etc. sont détaillés.
Ceci est possible avec les expressions lambda grâce à l '** interface fonctionnelle **. Si vous êtes intéressé, veuillez consulter l'article suivant sur Qiita. Qu'est-ce qu'une interface fonctionnelle? (Java)
Au lieu d'écrire un objet qui implémente une interface fonctionnelle, vous pouvez écrire une expression lambda, Si vous savez cela, je pense que vous pouvez y arriver.
J'ai écrit un article sur Qiita pour la première fois sous forme de mémorandum.
** Les variables locales sont reconnues comme Finales ** Souffrant de spécifications lambda, ** La gestion des exceptions en lambda ne peut pas être détectée de l'extérieur ** (naturellement en raison des spécifications lambda) Il y a quelques points pour rester coincé, Le ** pouvoir destructeur ** de style lambda est exceptionnel lorsqu'il est utilisé en combinaison avec l'API Stream. (Extrêmement, vous pouvez l'écrire même si vous ne vous souvenez pas du nom et de la méthode de l'interface fonctionnelle.)
Vous pouvez également apprendre l'idée de base lors de l'utilisation de fonctions anonymes et de lambdas dans d'autres langues, donc Nous espérons que ceux qui liront cet article essaieront également d'utiliser le style lambda.
Après tout, il n'y a pas d'autre choix que d'utiliser et de retenir ** des choses que vous ne comprenez pas.
Recommended Posts