Bei der Verwendung der for-Anweisung habe ich mich gefragt, was passieren würde, wenn ich sie in einem Lambda-Ausdruck schreibe, also werde ich sie als Memorandum einfügen.
Das Verhalten in der for-Anweisung
Für Anweisungstest 1
public static void main(String[] args){
int[] foos = {1, 2, 3, 4, 5};
//Ordentlich Für Aussage
for(int i = 0; i < foos.length; i++){
function(foos[i]);
}
//Extended For-Anweisung
for(int foo : foos){
function(foo);
}
//Lambda-Ausdruck
Arrays.stream(foos).forEach(foo -> function(foo));
//Mit Lambda-Ausdruckstyp Inferenz * Test.function(int)Ruft an
Arrays.stream(foos).forEach(Test::function);
}
Für Aussage Test 2
public static void main(String[] args){
int[] foos = {1, 2, 3, 4, 5};
//Ordentlich Für Aussage
for(int i = 0; i < foos.length; i++){
if(condition(foos[i])){
function(foos[i]);
}
}
//Extended For-Anweisung
for(int foo : foos){
if(condition(foo)){
function(foo);
}
}
//Lambda Ausdruck naive Schreibweise
Arrays.stream(foos).forEach(foo -> {
if(condition(foo)){
function(foo);
}
});
//Lambda-Ausdruck funktioneller
Arrays.stream(foos)
.filter(foo -> condition(foo))
.forEach(foo -> function(foo));
//Mit Lambda-Ausdruckstyp-Inferenz
Arrays.stream(foos)
.filter(Test::condition)
.forEach(Test::function);
}
Für Aussage Test 3
//Ordentlich Für Aussage
for(int i = 0; i < foos.length; i++){
int tmp = offset(foos[i]);
function(tmp);
}
//Extended For-Anweisung
for(int foo : foos){
int tmp = offset(foo);
function(tmp);
}
//Lambda-Ausdruck
Arrays.stream(foos)
.map(Test::offset)
.forEach(Test::function);
Recommended Posts