我使用rxjava 1.2.2。rxjava從緩衝區中檢索最大值
從我的List開始,我想填充一個緩衝區,然後按照例如每5秒鐘過濾緩衝區的Max項目的方式,只需要發送Max Item過濾器。
Observable<Item> EventEmitter = Observable.from(itemsList);
Observable<List<Item>> tapBufferEmitter = tapEventEmitter.buffer(5, TimeUnit.SECONDS);
MathObservable.from(tapBufferEmitter).max(new Comparator<List<Item>>() {
@Override
public int compare(List<Item> o1, List<Item> o2) {
int m1 =o1.getVal();
int m2 = o1.getVal();
if (m1 == m2){
return 0;
} else if (m1 > m2){
return 1;
} else {
return -1;
}
}
}).subscribeOn(Schedulers.from(executor1))
.subscribe(s -> {
System.out.println("Called thread: " + Thread.currentThread().getId());
syso.("Max Item is:" + s.getId());
}, e -> System.out.println(e.getMessage()));
但是,上面的代碼段當然不起作用。我不想比較2列表o1和o2,但我只想比較同一列表的項目。
最大運營商是否是正確的選擇?請注意,我沒有比較整數,但項目。每個項目是一個固定領域的珠子。我想要這個字段的最大值的那個。
如何從緩衝區中選擇最大值? 謝謝
你有沒有也要導入庫文件RxJavaMath,因爲MathObservable不在RxJava包中。 –
當然是......但我想知道運營商的正確拼接。 – Alex
我編輯了這個問題......你能再讀一遍嗎? – Alex