1
A
回答
1
也许这不是更优雅和简洁的解决方案,但我认为你可以使用像一个过滤器下面
这个解决方案,因为不完美:由发射器触发,以达到预期效果,你必须发出TIME
后假事件刷新去年
private static class TimedFilter<T> implements Func1<T, Collection<T>>{
private NavigableMap<Long,T> treeMap = new TreeMap<>();
private HashMap<T,Long> indexes = new HashMap<>();
private final long delta_millis;
public TimedFilter(long delta_millis) {
this.delta_millis = delta_millis;
}
@Override
public Collection<T> call(T x) {
long now_millis = System.currentTimeMillis();
Long oldIndex = indexes.put(x, now_millis);
if(oldIndex!=null)
treeMap.remove(oldIndex); // throws NPE - if the specified key is null and this map uses natural ordering
treeMap.put(now_millis,x);
long then_millis = now_millis - delta_millis;
Collection<T> values = treeMap.headMap(then_millis).values();
for (T v : values){
indexes.remove(v);
}
treeMap = treeMap.tailMap(then_millis, true);
return values;
}
}
测试
void testFunction(){
getEmitter()
.map(new TimedFilter<>(TIME))
.flatMap(Observable::from)
.subscribe(System.out::print)
;
}
更新: as @tilois建议使用System.nanoTime()
更可靠,如果你运行un Android,也可以使用返回millis的SystemClock.elapsedRealtime()
。 ;
相关问题
- 1. 过滤事件节点
- 2. Java:过滤掉重复的事件
- 3. 的Rx ForkJoin不与自定义事件
- 4. 过滤FullCalendar事件
- 5. 过滤事件 - SQL
- 6. 通过ByIncludingOnly过滤事件
- 7. Java 8流过滤器来过滤文件的特定部分
- 8. 过滤器触摸事件
- 9. AngularJs过滤器事件?
- 10. Powershell:过滤事件日志
- 11. 过滤重复的事件
- 12. jquery fullcalendar事件过滤
- 13. 吊带事件过滤
- 14. F#RX使用定时器
- 15. Android,java rx,异步
- 16. 对由Qt5.0事件鼠标点击事件过滤器多次调用过滤
- 17. RX Java多订阅
- 18. 文件Click事件停止了过滤
- 19. 使用RX同步多个事件
- 20. 无功扩展(Rx)未命中事件
- 21. 用Rx订阅TextBox的KeyUp事件?
- 22. 如何用RX节制事件流?
- 23. 将事件控制为命令和RX
- 24. 在RX中组合多个事件
- 25. 获取Facebook上的特定过滤条件的所有事件
- 26. 鼠标退出时锁定事件java
- 27. Java定时器未知事件
- 28. 按事件代码过滤可过滤的筛选器
- 29. RX Java android for retrofit
- 30. 如何确定执行过滤器时通过gitattributes过滤的文件?
我觉得'nanoTime'会更适合:http://stackoverflow.com/questions/351565/system-currenttimemillis-vs-system-nanotime – tilois
我用'System.currentTimeMillis()'因为据我所知是最轻的方法,即使不是单调和精确。我的时间片大约一秒左右,我认为是可以的。当然我需要非常精确的时间'nanoTime'是一种很好的选择 – miv
我推荐'nanoTime'的原因并不是因为'currentTimeMillis'缺乏精确度,而是因为它是挂钟时间并且可以改变(例如夏时制)因此我不会推荐它测量_elapsed_时间。 – tilois