In Java8 habe ich einen Stream und ich möchte eine Strom von Mappern anwenden.Wenden Sie einen Stream von Mappern auf einen anderen Stream in Java8
Zum Beispiel:
Stream<String> strings = Stream.of("hello", "world");
Stream<Function<String, String>> mappers = Stream.of(t -> t+"?", t -> t+"!", t -> t+"?");
Ich mag schreiben:
strings.map(mappers); // not working
Aber mein aktueller bester Weg, um meine Aufgabe zu lösen, ist:
for (Function<String, String> mapper : mappers.collect(Collectors.toList()))
strings = strings.map(mapper);
strings.forEach(System.out::println);
Wie kann ich dieses Problem lösen
- ohne die Mapper in eine Liste zu sammeln
- ohne Verwendung eines
for
Schleife - ohne meine fließend Code zu brechen
Andere Varianten, die funktionieren: 'mappers.reduce (Function.identity() Funktion :: andThen) ',' mappers.reduce (Function.identity(), Function :: compose) '. – rgettman
@gerttman: Die 'orElse'-Variante ist eine kleine Optimierung, da sie keine Identitätsfunktion mit einer anderen Funktion kombiniert. – Holger
Es wäre schön, wenn 'Function.identity()' 'compose' und' andThen' ... überschreiben würde ... Oder vielleicht würde der JIT-Compiler diese Komplexität sowieso loswerden? –