使用reduce和scan根据描述性索引创建多个源

时间:2016-06-20 16:22:31

标签: rx-java reduce collect

有一个流可以收集数据作为其受体的响应。

所以假设我有n个受体,在接收到的帧数据中,我能够知道接收到的受体索引,并执行过滤器并为每个接收器创建新的源。如下所示。

------- ------ A1 B1 C1 ----- ---- ----- A2 A3 ---- ---- C2 B2 -

------- A1 A2 ----------------- ------- A3 -------------

--------------- B1 B2 ------------------------------ -

---------------------- C1 --------------- C2 -------- -

对于每个受体:

知道每个数据包都有时间戳。在这个阶段:

  1. 我想计算每两个数据包之间的延迟并计算delta
  2. 之和
  3. 创建一个增量流,并从3个增量的样本中计算每两秒内的累积延迟
  4. 最后,创建一个延迟流,我只接受每个受体的最后一次延迟。
  5. 这里我是

    List<Integer> indexes = Arrays.asList(1,2,3,5);
        for(int receptorIndex : indexes) {
            observeSource(data, receptorIndex)
            .map(messages -> computesDelay(store, messages.get(1), messages.get(0)))
            .buffer(2000L, TimeUnit.SECONDS, 3)
            .map(periods -> {
                Long delta = 0L;
                for(Long period : periods)
                    delta += period;
                return delta;
            })
            .scan((x,y) ->  {return x+y;})
            .takeLast(1)
            .reduce((seed, value) -> {
                return seed + value;
            })
            .subscribe(System.out::println);
        }
    
    public static long computesDelay(Map<String, Long> list, Data one, Data another){
            long expectedDelay = list.get(one.getMessage()) - list.get(another.getMessage());
            long effectiveDelay = one.getTimestamp() - another.getTimestamp();
            return effectiveDelay - expectedDelay;
        }
    
        public static Observable<List<Data>> observeSource(Observable<Data> data, int ReceptorIndex) {
            return data
            .filter(receptor -> receptor.getIndex() == ReceptorIndex)
            .buffer(2,1)
            .filter(list -> list.size() == 2);
        }
    

    问题是,当我在扫描后使用reducetakeLast(1)时,它会呈现0元素。

    我在这里缺少什么。

    我希望最终输出如下(案例a)

    ------ ------ A1 B1 C1 ----- ---- ----- A2 A3 ---- ---- C2 B2 ------ --a4 ---------

    ------- A1 -----------------(A1,A2)-------(A2,A3) - - - - ----(A3,A4)----

    ---------------------------- 2 ------------- 1 ---- ------------ -------- 6

    --------------------------- 9 -----------------

0 个答案:

没有答案