聚合所有已发出的流并使用rxJava发送它们

时间:2016-11-22 09:21:16

标签: java rx-java reactive-programming reactivex

我有一个发送数据页A, B, C, D...的流。我可以使用哪个运算符来获取这样的流:[A], [A, B], [A, B, C], [A, B, C, D]...

我知道collecttoList,但它们只会在流的末尾发出一次。

2 个答案:

答案 0 :(得分:4)

您可以试用'scan'运算符。

答案 1 :(得分:1)

Java 8

你可以用这种方式得到一串String []:

  List<String> array = Arrays.asList("A","B","C","D");
  String[] st ={""};
  Stream<String[]> stream  = array.stream().map(x -> (st[0]+=x).split("\\B"));
  //print it
  stream.forEach(s -> System.out.println(Arrays.toString(s)));

RX JAVA (扩大JohnWowUs的答案)

 List<String> array = Arrays.asList("A","B","C","D");
 Func2<String,String,String> function = new Func2<String,String,String>(){
    @Override
    public String call(String paramT1, String paramT2) {
        return paramT1 + paramT2;
    }
 };
 Observable<String> scan = Observable.from(array).scan(function);
 scan.forEach(x-> System.out.println(x));