在Java中,我们能以某种方式将流拆分为不超过N个元素的子流吗?例如
Stream<Integer> s = Stream.of(1,2,3,4,5);
Stream<Stream<Integer>> separated = split(s, 2);
// after that separated should contain stream(1,2), stream(3,4), stream(5)
被两个流分割的解决方案只对2个流是正确的,对于N个流同样如此,这将是非常丑陋和只写的。
发布于 2018-06-10 07:19:18
你不能简单直接地将一个Stream
拆分成2个或更多的Streas
。唯一的方法是通过对将元素收集到List
,然后再将它们映射回Stream
:
Stream<Integer> s = Stream.of(1,2,3,4,5);
List<Integer> list = s.collect(Collectors.toList());
int size = list.size();
List<List<Integer>> temp = new ArrayList<>();
List<Integer> temp2 = new ArrayList<>();
int index = 0;
for (int i=0; i<size; i++) {
temp2.add(list.get(i));
if (i%2!=0) {
temp.add(temp2);
temp2 = new ArrayList<>();
}
if (i == size - 1 && size%2!=0) {
temp.add(temp2);
}
}
Stream<Stream<Integer>> stream = temp.stream().map(i -> i.stream());
正如你所看到的,这真的是一条很长的路,也不值得。将对存储在List
中而不是Stream
中不是更好吗?java-stream应用编程接口不是用来存储数据的,而是用来处理数据的。
https://stackoverflow.com/questions/41127391
复制相似问题