A Java 8 Streams segítségével beágyazható és újrafelhasználható a közbenső adatfolyam-műveletek valamilyen módon, amely nem szakítja meg az adatfolyam-folyamatot?
Tekintse meg ezt a példát a Java oktatóanyagból a streamekről:
double average = roster
.stream()
.filter(p -> p.getGender() == Person.Sex.MALE)
.mapToInt(Person::getAge)
.average()
.getAsDouble();
Tegyük fel, hogy a szűrőt és a mapToInt műveleteket a kódom különböző helyein kell használnom. Lehet, hogy megpróbálnám beágyazni ezt a logikát, hogy újra felhasználható legyen, például:
IntStream maleAges(Stream<Person> stream) {
return stream
.filter(p -> p.getGender() == Person.Sex.MALE)
.mapToInt(Person::getAge)
}
Ez szép, de ahhoz, hogy használhassam, előfordulhat, hogy rendetlenséget kell okoznom a folyami csővezetékben. Például, ha szeretném a Bob nevű férfiak átlagéletkorát:
double averageBob =
maleAges(roster
.stream()
.filter(p -> "Bob".equals(p.getName()))
)
.average()
.getAsDouble();
Van valami jobb módja ennek? Valami ilyesmire gondolok:
double averageBob = roster
.stream()
.filter(p -> "Bob".equals(p.getName()))
.apply(this::maleAges) // Doesn't compile
.average()
.getAsDouble();