boolean
char
byte
, short
, int
, long
. Il n'existe pas de type non signé.float
, double
On passe par un foncteur :
import java.util.function.Function; public class Test { public Boolean f() { System.out.println("Fonction"); return true; } } Function<Test, Boolean> f = Test::f; Test t = new Test(); f.apply(t);
Liste des types permettant de stocker des pointeurs sur fonction :
Supplier () -> x Consumer x -> () BiConsumer x, y -> () Callable () -> x throws ex Runnable () -> () Function x -> y BiFunction x,y -> z Predicate x -> boolean UnaryOperator x1 -> x2 BinaryOperator x1,x2 -> x3
Java 8 lambda Void argument Archive du 29/04/2015 le 11/04/2023
Et pour une fonction qui a plus de 2 paramètres, il faut le définir soit même.
@FunctionalInterface interface Function6<One, Two, Three, Four, Five, Six> { public Six apply(One one, Two two, Three three, Four four, Five five); }
Can a java lambda have more than 1 parameter? Archive du 10/01/2015 le 11/04/2023
Quand une variable est passé en paramètre, elle est copié si c'est un type primitif, elle est passé en référence sinon.
Plutôt que
String str; if (i == 1) str = "un"; else if (i == 2) str = "deux"; else str = "trois";
écrire
Function<Integer, String> strLambdb = ii -> { if (i == 1) return "un"; else if (i == 2) return "deux"; else return "trois"; }; final String str = strLambdb.apply(i);
Ce n'est pas encore le style d'écriture parfait mais ça permet de mettre la variable final
.