将消费者转换为函数
接口的许多 lambda 采用以下形式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 中是否有任何内容使我的方法变得多余?