Maison  >  Article  >  Java  >  Introduction à l'utilisation des références de fonctions en Java8

Introduction à l'utilisation des références de fonctions en Java8

黄舟
黄舟original
2017-09-19 10:27:021576parcourir

Cet article vous présente principalement l'utilisation des références de fonctions dans le didacticiel d'apprentissage Java8. L'article le présente en détail à travers un exemple de code. Il a une certaine valeur d'apprentissage de référence pour les études ou le travail de tous les amis qui en ont besoin. apprendre ensemble.

Préface

Dans l'article précédent, nous avons utilisé des exemples pour expliquer comment définir et utiliser des expressions lambda, et par rapport à d'autres langages, A spécification spéciale des expressions lambda en Java. Et mentionné, les expressions lambda peuvent être encore simplifiées en références de fonction.

Cet article présentera comment utiliser les références de fonctions. Pas grand chose à dire, jetons un œil à l'introduction détaillée.

Types de références de fonction

Les références de fonction sont divisées en quatre types suivants :

  • Les fonctions statiques, telles que la fonction parseInt de la classe Integer, peuvent être écrites sous la forme de Integer::parseInt

  • Références aux fonctions au niveau objet, telles que la fonction de longueur de la classe String, peut être écrit comme String::length

  • Une référence à une fonction d'une instance spécifique, telle que getValue d'une instance nommée coûteuseTransaction, écrite comme expensiveTransaction::getValue

  • Une référence à un constructeur

Fonction statique

Par exemple :


Function<String, Integer> stringToInteger = (String s) -> Integer.parseInt(s);

Peut s'écrire comme :


Function<String, Integer> stringToInteger = Integer::parseInt;

Une référence à une fonction au niveau objet


BiPredicate<List<String>, String> contains =
(list, element) -> list.contains(element);

peut s'écrire comme :


BiPredicate<List<String>, String> contains = List::contains;

Référence du constructeur

ci-dessous Pour donner un autre exemple de constructeur, définissez d'abord une interface fonctionnelle, et la seule méthode get renvoie un objet du type spécifié.


@FunctionalInterface
public interface Supplier<T> {
 T get();
}


Supplier<TantanitReader> constructor = () -> new TantanitReader();
TantanitReader tantanitReader = constructor.get();

L'expression lambda du code ci-dessus est nouvelle et renvoie un nouvel objet, faisant de la variable constructeur un référence du constructeur à l'appareil.

est équivalent à la référence de fonction suivante :


Supplier<TantanitReader> constructor2 = TantanitReader::new;
TantanitReader tantanitReader2 = constructor2.get();

Les exemples ci-dessus sont tous sans paramètres. Ce qui suit utilise toujours le constructeur comme exemple pour. introduire Avec des paramètres :


public TantanitReader(String loginName) {
 this.loginName = loginName;
}


Function<String,TantanitReader> constructor3 = (loginName) -> new TantanitReader(loginName);
TantanitReader tantanitReader3 = constructor3.apply("jack");

Function<String,TantanitReader> constructor4 = TantanitReader::new;
TantanitReader tantanitReader4 = constructor4.apply("jack");
TantanitReader tantanitReader5 = constructor4.apply("tom");

À l'heure actuelle, puisque la fonction n'a qu'un seul paramètre, vous pouvez utiliser celui de Java propre fonction Cette interface fonctionnelle, ses fonctions réelles sont les suivantes :


R apply(T t);

fonctions pour renvoyer un résultat basé sur un paramètre. À partir de là, nous pouvons utiliser constructor4 et la référence de fonction correspondante constructor5.

Résumé

L'utilisation de références de fonction peut non seulement simplifier les expressions lambda, mais aussi se concentrer sémantiquement davantage sur le nom de la méthode, c'est-à-dire ce qui doit être fait et le le niveau d'abstraction est plus proche de la cognition humaine. Par conséquent, les références de fonction doivent être utilisées autant que possible.

Résumé

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn