Bei der Verwendung von filter(Predicate<? super T> predicate)
Anrufe in Java 8 Lambda-Ausdrücke, bin ich in zwei Gedanken darüber, ob alle Predicate
Logik in einen Anruf zu setzen, oder filter(Predicate<? super T> predicate)
Anrufe zu ketten, um die Lesbarkeit wo angemessen.Java 8 lambdas mehrere Filteraufrufe
Ich nehme an, dass filter(Predicate<? super T> predicate)
Anrufe Verkettungs billig sein wird, da sie noch nicht einen Terminator erfüllt, so würde auf der Seite der Lesbarkeit irren, aber ich bin nicht genug in meinem Wissen der Streams
API zuversichtlich zu verstehen, was den Handel -offs sind.
Mit Hilfe des folgenden Beispiels (man denke auch komplexere Prädikaten), die Umsetzung ist überlegen: List<Person> usingOneFilter
oder List<Person> usingTwoFilters
?
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class SEExample {
private static class Person {
private final int age;
private final int heightInCm;
public Person(int age, int heightInCm) {
this.age = age;
this.heightInCm = heightInCm;
}
public int getAge() {
return age;
}
public int getHeight() {
return heightInCm;
}
}
public static void main(String[] args) {
List<Person> people = Arrays.asList(
new Person(14, 140),
new Person(15, 140),
new Person(16, 150),
new Person(17, 120));
List<Person> usingOneFilter = people
.stream()
.filter(p -> p.getAge() >= 16 && p.getHeight() >= 130)
.collect(Collectors.toList());
List<Person> usingTwoFilters = people
.stream()
.filter(p -> p.getAge() >= 16)
.filter(p -> p.getHeight() >= 130)
.collect(Collectors.toList());
}
}
Sechs von eins, ein halbes Dutzend der anderen. Kein wirklicher Unterschied; ist egal. –
Hallo Louis, danke für deine Eingabe. Von deinem Kommentar werde ich annehmen, dass es aus Performance-Sicht ziemlich gleich ist. Würden Sie in diesem Fall nicht zustimmen, dass mehrere Filteraufrufe die Lesbarkeit verbessern könnten, insbesondere wenn dort eine Menge boolescher Logik vor sich geht? –
Wahrscheinlich? Ich würde den konkreten Fall sehen müssen, und es ist definitiv etwas anderes Entwickler werden unterschiedliche Meinungen zu haben. –