如何搜索满足特定条件的两个元素,发出元素并继续在RxJava中搜索?

时间:2018-04-30 16:52:03

标签: reactive-programming rx-java2

我有一个Flowable(冷)我需要应用以下运算符:

  1. 按顺序浏览流的元素,直到满足条件A.缓存满足此条件的元素。
  2. 继续下一个元素,但现在检查条件B.如果找到满足此条件的元素
  3. 应用一个函数,该函数接受先前收集的两个元素,并在第二个流上发出新元素。
  4. 继续,直到没有剩余的元素满足条件A和满足条件B的元素B.删除所有缓存的元素。
  5. 请注意,在发出之后,为A检查的下一个元素应该与刚满足条件B的元素相同,因为元素可能满足两个条件。

    我想不出用RxJava做这个的方法。我的第一直觉是takeUntil()和/或skipUntil(),但两者都只应用一次。我还没有足够的反应式编程经验来编写自定义运算符。

    感谢任何想法和指示!

1 个答案:

答案 0 :(得分:2)

过滤掉A和B,将它们收集到一个列表中,然后检查列表中的后续A& B,应用函数将结果添加到列表中并将该列表返回到flatMapIterable

source
.filter(v -> isA(v) || isB(v))
.toList()
.flatMapIterable(list -> {
     List<C> result = new ArrayList<C>();

     for (int i = 0; i < list.size() - 1; i++) {
         T a = list.get(i);
         T b = list.get(i + 1);
         if (isA(a) && isB(b)) {
             result.add(functionAB(a, b));
             i++;
         }
     }

     return result;
})