Viele lambdas für die Function
Schnittstelle in FormConverting Verbraucher in die Funktionen
t -> {
// do something to t
return t;
}
ich dies tun, so oft, dass ich eine Methode für sie so geschrieben haben.
static <T> Function<T, T> consumeThenReturn(Consumer<T> consumer) {
return t -> {
consumer.accept(t);
return t;
};
}
Dies ermöglicht es mir, wie diese wirklich schöne Dinge zu tun:
IntStream.rangeClosed('A', 'Z')
.mapToObj(a -> (char) a)
.collect(Collectors.collectingAndThen(Collectors.toList(), consumeThenReturn(Collections::shuffle)))
.forEach(System.out::print);
Gibt es eine andere Art und Weise Umwandlungen wie dies zu tun, ohne auf meine eigene Methode zu verlassen? Gibt es etwas in den neuen APIs, die ich verpasst habe, was meine Methode überflüssig macht?
Ich glaube nicht, dass es ist: werfen Sie einen Blick auf 'Collectors.toList()' Code zum Beispiel, es tut '(links, rechts) -> {left.addAll (rechts); Rückkehr nach links; }, '. Das ist das Problem von Methoden, die ihr Argument mutieren ... (Randbemerkung: Sie können 'UnaryOperator' anstelle von 'Funktion ') haben. –
Tunaki
Ich würde Ihre Funktion in ['tee'] umbenennen (https: //en.wikipedia .org/wiki/Tee_ (Befehl)). – dasblinkenlight
Alles wurde schon gesagt, aber ich arbeite an etwas, das das schon macht. https://github.com/TouK/ThrowingFunction/ jeder Eingang wird geschätzt –