sich die folgende pojo Klasse Lombok AnmerkungenJava 8 summarise durch mehr Prädikat
@Setter
@Getter
@Builder
@ToString
public class User {
private String firstName;
private String lastName;
private Gender gender;
private Integer age;
private Integer points;
}
Anforderung kommentierte Verwendung ist für folgende Prädikate LongSummaryStatistics
von 'Punkten' Attribute zu erhalten:
Predicate<User> adultMenPredicate = user -> Gender.MALE == user.getGender && user.getAge()>18
Predicate<User> adultWomenPredicate = user -> Gender.FEMALE == user.getGender && user.getAge()>18
Predicate<User> minorPredicate = user -> user.getAge()<18
Meine aktuelle Implementierung ist:
private LongSummaryStatistics getPointStats(List<User> users, Predicate<User> predicate) {
return users.stream().filter(predicate).mapToLong(User::getPoints).summaryStatistics();
}
System.out.println("point stats for adult men: " + getPointStats(users, adultMenPredicate));
System.out.println("point stats for adult women: " + getPointStats(users, adultWomenPredicate));
System.out.println("point stats for minors: " + getPointStats(users, minorPredicate));
Hier haben wir den Benutzer Sammlung dreimal iterieren. Ist es möglich, dies in nur einer Iteration zu erhalten?
Nicht mit Streams. Aus rechnerischer Sicht ist der Vorgang des dreifachen Iterierens über die Liste konstant, so dass Leistungsprobleme ignoriert werden. Halten Sie es so, wie es ist, viel lesbarer und testbar. Wenn Sie wirklich (wirklich) Leistung brauchen, gehen Sie für ein for-each, indem Sie Ihre eigenen Statistiken und wenn-dann-sonst im for-each erstellen – JeanValjean