给定函数函数< T,T> f和流< T>创造新的流< T>的好方法(良好的可读性,良好的性能)是什么?它首先包含原始元素,然后是由f转换的元素.
有人可能认为这会起作用:
Stream.concat(ts,ts.map(f));
但这不起作用,导致异常:
java.lang.IllegalStateException: stream has already been operated upon or closed
注意:顺序很重要:原始元素必须以正确的顺序排在第一位,然后按匹配顺序排列转换后的元素.
解决方法
你不能打开一瓶酒,然后将瓶子传递给另一个人并让他再次打开它.
因此,我认为通过溪流的性质来实现你的要求是不可能的.
每个流都有一个“处理”链.你不能有两个.
所以你能得到的最接近的就是从“它的起源”开始
Stream.concat(someList.stream(),someList.stream().map(f));
例如.当然,如果你没有这个清单,你可以去:
List<Whatever> someList = ts.collect(Collectors.asList());
第一.