RxJava 按时间戳分组

RxJava group by timestamp

我有一个问题要解决,RxJava 似乎是处理这种事情的正确方法,但我有点迷失在所有这些不同的运算符中,不确定哪个适合我的情况。

我有以下类型的有限对象流:

class MyObject {
    long timestamp;
    Object data;
}

我的目标是按时间戳对它们进行分组。假设每个新的小时都需要生成新的组,所以我有一组代表每小时的事件的组。

我查看了 groupBy 运算符,但不确定我是否完全理解键选择器和元素选择器的概念。

这对 groupBy 来说是一项简单的工作。键选择器允许您选择用于建立组的键。可以把它想象成带有 GROUP BY 的 SQL 语句。值选择器让你提取你想在每个组中观察的内容,它不需要是整个对象,而只是它的一部分;这相当于 SQL SELECT.

对于你的情况,可以这样操作:

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

这将为您提供 GroupedObservable<Long, Object> 的序列。小时计算是基本的,根据您的环境,您可以使用诸如 jodatime 或 Java 8 的新日期 API 之类的东西来执行准确的计算。