将流分成具有N个元素的子流

时间:2016-12-13 17:43:12

标签: java java-8 java-stream

我们能否以某种方式将流分割成只有Java中不超过N个元素的子流? 例如

.replace()

分割两个流解决方案仅对2个流是正确的,对于N个流来说相同是非常丑陋和只写。

1 个答案:

答案 0 :(得分:2)

您无法轻松直接地将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中是不是更好? API不用于数据存储,而是用于处理。