我想使用rxJava按信号缓冲,如here所述,但是基于对象的时间戳而不是固定的间隔。如果将分钟用作信号,那么期望的结果将如下所示:
2018-03-26 19:14:13
2018-03-26 19:14:44
2018-03-26 19:14:59
---- signal ----
2018-03-26 19:15:23
2018-03-26 19:15:27
---- signal ----
2018-03-26 19:16:01
2018-03-26 19:16:04
2018-03-26 19:16:40
2018-03-26 19:16:45
我花了一整天的时间,但我无法让它发挥作用。这个问题已经被问到before但是接受的答案中的代码似乎是旧版本的rxJava。我还发现了另一个solution,但是这样也无法检查以前的值。
答案 0 :(得分:0)
完整性的答案,但信誉完全归功于akarnokd。再次感谢!
OffsetDateTime baseDateTime = OffsetDateTime.of(2018, 3, 27, 0, 0, 0, 0, ZoneOffset.UTC);
Observable
.fromArray(
baseDateTime.plusNanos(1),
baseDateTime,
baseDateTime,
baseDateTime.plusMinutes(1),
baseDateTime.plusMinutes(1).plusNanos(1),
baseDateTime.plusMinutes(1),
baseDateTime.plusMinutes(2).plusNanos(1),
baseDateTime.plusMinutes(2),
baseDateTime,
baseDateTime.plusNanos(1),
baseDateTime.plusMinutes(4),
baseDateTime.plusMinutes(4).plusNanos(1)
)
.compose(bufferUntilChanged(dateTime -> dateTime.truncatedTo(ChronoUnit.MINUTES)))
.subscribe(System.out::println);
private static <T, K> ObservableTransformer<T, List<T>> bufferUntilChanged(Function<T, K> keySelector) {
return o -> o.publish(q -> q.buffer(q.distinctUntilChanged(keySelector).skip(1)));
}