Function接口的许多lambda都采用了这种形式
t -> {
// do something to t
return t;
}
Run Code Online (Sandbox Code Playgroud)
我经常这样做,所以我已经为此编写了一个方法.
static <T> Function<T, T> consumeThenReturn(Consumer<T> consumer) {
return t -> {
consumer.accept(t);
return t;
};
}
Run Code Online (Sandbox Code Playgroud)
这使我能够做到这样的非常好的事情:
IntStream.rangeClosed('A', 'Z')
.mapToObj(a -> (char) a)
.collect(Collectors.collectingAndThen(Collectors.toList(), consumeThenReturn(Collections::shuffle)))
.forEach(System.out::print);
Run Code Online (Sandbox Code Playgroud)
还有另一种方法可以在不依赖我自己的方法的情况下进行这样的转换吗?我错过的新API中有什么东西会让我的方法变得多余吗?