Récemment, j'ai eu la chance d'utiliser Java grâce à mon travail. J'ai mis à jour mes anciennes connaissances Java (1.3).
Il s'agit d'une fonction permettant d'implémenter facilement une interface fonctionnelle.
Cela seul est rafraîchissant, alors je voudrais l'expliquer avec un exemple.
public static void main(String[] args) {
class Sample implements Runnable {
public void run() {
System.out.println("I Love Pengin!");
}
}
Runnable runner = new Sample();
times( 10, runner );
}
public static void times( int count, Runnable runner ) {
for( int i = 0; i < count; i++ ) {
runner.run();
}
}
public static void main(String[] args) {
funcCall( 10, () -> System.out.println("I Love Pengin!") );
}
public static void times( int count, Runnable runner ) {
for( int i = 0; i < count; i++ ) {
runner.run();
}
}
L'exemple est le traitement de la fonction times
qui répète plusieurs fois le traitement spécifié.
Si vous les comparez, vous pouvez voir que l'expression lambda est assez complète.
La méthode de substitution d'une partie du traitement par un autre objet est appelée délégation. En utilisant la formule lambda, je pense que l'avantage est que cette délégation est beaucoup plus facile à écrire.
Voyons le format lors de l'utilisation de l'expression lambda
() -> System.out.println("I Love Pengin!")
->
décrit le contenu réel du traitement. Si le contenu de traitement couvre plusieurs processus, écrivez -> {Traitement}
ici.En spécifiant l'argument de l'expression lambda, l'argument peut être utilisé pendant le traitement.
(i) -> System.out.println("I Love Pengin!" + i)
Il est nécessaire d'utiliser correctement l'interface de la fonction en fonction du type d'argument et de la valeur de retour à utiliser. S'il y a un argument et aucune valeur de retour, ce sera comme suit.
public static void times( int count, Consumer<Integer> runner ) {
for( int i = 0; i < count; i++ ) {
runner.accept(new Integer(i));
}
}
L'interface à utiliser correctement est la suivante.
type | Interface de fonction | Méthode |
---|---|---|
0 arguments qui ne renvoient pas de valeur | Runnable | run |
1 argument qui ne renvoie pas de valeur | Consumer | accept |
2 arguments qui ne renvoient pas de valeur | BiConsumer | accept |
0 arguments qui renvoient une valeur | Supplier | get |
1 argument qui renvoie une valeur | Function | apply |
2 arguments qui renvoient une valeur | BiFunction | apply |
1 argument qui renvoie une valeur booléenne | Predicate | test |
Deux arguments qui renvoient une valeur booléenne | BiPredicate | test |
1 argument qui renvoie le résultat de l'opération | UnaryOperator | test |
2 arguments qui renvoient le résultat de l'opération | BinaryOperator | test |
Recommended Posts