我有一个项目列表流(即每个发射都是一个列表)。列表长度不一。我想要一个运算符(或几个组合)可以重新分割列表,以使每个列表的长度相同。
这是一个简单的数组示例。
int[] array1 = {1, 2, 3};
int[] array2 = {4, 5};
int[] array3 = {6, 7, 8, 9};
Observable.just(array1, array2, array3)
.emitGroupsOf2() // <--- what operator can I use here?
.subscribe(ints -> {
// I want:
// emit {1,2}
// emit {3,4}
// emit {5,6}
// emit {7,8}
// complete
});
}
在此示例中,我想“坚持3”,直到听到4;然后我想“坚持到5”,直到听到6。最后,我想“扔掉” 9,因为我们再也没有价值来创建另一对了。
我看过map
和scan
和buffer
,但没有一个是正确的。
答案 0 :(得分:1)
RxJava不支持基本数组,因此您必须进行一些包装和展开:
Observable.just(array1, array2, array3)
.concatMap(array -> Observable.range(0, array.length).map(idx -> array[idx]))
.buffer(2)
.map(buf -> {
int[] result = new int[buf.size()];
for (int i = 0; i < result.length; i++) {
result[i] = buf.get(i);
}
return result;
})
.subscribe(ints -> System.out.println(Arrays.toString(ints)));