[JAVA] Jusqu'à ce que les débutants en programmation puissent utiliser des expressions lambda

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.

Le style Lambda? Aucune idée!

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." **

Pourquoi ne comprends-tu pas la formule lambda

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é.

Je ne comprends pas le sens du mot

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?

Je ne comprends pas les avantages

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.

Je ne sais pas écrire

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? ** **

Alors, comment l'avez-vous compris après tout?

J'ai essayé d'utiliser Stream

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.

Utilisez .forEach ()

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.

Utilisez .mapToInt ()

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 réussi à m'en servir un peu

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

Jusqu'à ce que les débutants en programmation puissent utiliser des expressions lambda
Comment utiliser les expressions Java lambda
[Pour les débutants] À propos des expressions lambda et de l'API Stream
Utiliser des expressions Java lambda en dehors de l'API Stream
"Héritage" que même les débutants en orientation objet peuvent comprendre
Polymorphisme que même les débutants en orientation objet peuvent comprendre
Comprendre les expressions lambda Java 8
À propos des expressions Java lambda
Expliquer les expressions lambda Java 8
Profitez de la programmation avec un style lambda et une interface fluide