2015-09-11 32 views
1

我有一個問題需要解決,而RxJava似乎是一種處理這種事情的正確方法,但是Im有點不知道這些不同的操作符,並且不知道哪一個會適用於我的情況。RxJava group by timestamp

我有以下類型的對象的有限流:

class MyObject { 
    long timestamp; 
    Object data; 
} 

我的目標 - 就是通過時間戳組他們。可以說每個新的小時都需要生成新的小組,因此我有一組代表每小時代表事件的小組。

我看着groupBy運算符,但林不知道我完全理解關鍵選擇器和元素選擇器的概念。

回答

2

這是一個簡單的工作groupBy。通過按鍵選擇器,您可以選擇要建立組的按鍵。把它想象成GROUP BY的SQL語句。值選擇器讓你在每個組中提取你想要觀察的內容,而不需要整個對象而只是其中的一部分;這相當於一個SQL SELECT

隨着你的情況,這是它是如何做:

source 
.groupBy(
    v -> v.timestamp/3_600_000L , 
    v -> v.data 
); 

這會給你的GroupedObservable<Long, Object>序列。小時計算是基本的,取決於您的環境,您可以使用諸如jodatime或Java 8的新日期API等來執行精確的計算。

+0

非常感謝!出於某種原因,分組選擇器似乎對我來說更加複雜:(無論如何,當你有一些時間 - 你可以看看http://stackoverflow.com/questions/32570118/rxjava-debounce-by-arbitrary-value?謝謝! –