Многие lambdas для интерфейса Function
принимают форму
t -> {
// do something to t
return t;
}
Я делаю это так часто, что написал для него такой метод.
static <T> Function<T, T> consumeThenReturn(Consumer<T> consumer) {
return t -> {
consumer.accept(t);
return t;
};
}
Это позволяет мне делать действительно приятные вещи, такие как:
IntStream.rangeClosed('A', 'Z')
.mapToObj(a -> (char) a)
.collect(Collectors.collectingAndThen(Collectors.toList(), consumeThenReturn(Collections::shuffle)))
.forEach(System.out::print);
Есть ли другой способ сделать такие преобразования, не полагаясь на мой собственный метод? Есть ли что-нибудь в новых API, которые я пропустил, что делает мой метод избыточным?