Lors de l'utilisation de l'instruction for, je me demandais ce qui se passerait si je l'écrivais dans une expression lambda, je vais donc la mettre sous forme de mémorandum.
Le comportement dans l'instruction for
Pour le test d'énoncé 1
public static void main(String[] args){
int[] foos = {1, 2, 3, 4, 5};
//Instruction For ordinaire
for(int i = 0; i < foos.length; i++){
function(foos[i]);
}
//Instruction Extended For
for(int foo : foos){
function(foo);
}
//expression lambda
Arrays.stream(foos).forEach(foo -> function(foo));
//Avec l'inférence de type d'expression lambda * Test.function(int)Appelle
Arrays.stream(foos).forEach(Test::function);
}
Pour le test d'énoncé 2
public static void main(String[] args){
int[] foos = {1, 2, 3, 4, 5};
//Instruction For ordinaire
for(int i = 0; i < foos.length; i++){
if(condition(foos[i])){
function(foos[i]);
}
}
//Instruction Extended For
for(int foo : foos){
if(condition(foo)){
function(foo);
}
}
//expression lambda manière naïve d'écrire
Arrays.stream(foos).forEach(foo -> {
if(condition(foo)){
function(foo);
}
});
//expression lambda plus fonctionnelle
Arrays.stream(foos)
.filter(foo -> condition(foo))
.forEach(foo -> function(foo));
//Avec l'inférence de type d'expression lambda
Arrays.stream(foos)
.filter(Test::condition)
.forEach(Test::function);
}
Pour le test de déclaration 3
//Instruction For ordinaire
for(int i = 0; i < foos.length; i++){
int tmp = offset(foos[i]);
function(tmp);
}
//Instruction Extended For
for(int foo : foos){
int tmp = offset(foo);
function(tmp);
}
//expression lambda
Arrays.stream(foos)
.map(Test::offset)
.forEach(Test::function);
Recommended Posts