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 之类的东西来执行准确的计算。
我有一个问题要解决,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 之类的东西来执行准确的计算。