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. Java:过滤掉重复的事件
- 2. 过滤事件 - SQL
- 3. Java 8流过滤器来过滤文件的特定部分
- 4. AngularJs过滤器事件?
- 5. 吊带事件过滤
- 6. Powershell:过滤事件日志
- 7. F#RX使用定时器
- 8. RX Java多订阅
- 9. 文件Click事件停止了过滤
- 10. 如何用RX节制事件流?
- 11. 在RX中组合多个事件
- 12. 用Rx订阅TextBox的KeyUp事件?
- 13. 无功扩展(Rx)未命中事件
- 14. 将事件控制为命令和RX
- 15. 鼠标退出时锁定事件java
- 16. Java定时器未知事件
- 17. RX Java android for retrofit
- 18. 如何确定执行过滤器时通过gitattributes过滤的文件?
- 19. 如何设置Rx.Observable.fromEvent以使用jQuery过滤的事件
- 20. 需要继续过滤Java流时,图过滤和使用FindFirst
- 21. 在Rx JS中触发自定义事件
- 22. 单击事件更改过滤器vue.js
- 23. 用ng-click过滤新闻和事件
- 24. 如何捕获JTable过滤器事件?
- 25. 用logback过滤掉扫描仪事件
- 26. 过滤/匹配事件日志记录
- 27. 鼠标事件“点击过滤器”
- 28. log4j2过滤器修改日志事件?
- 29. 创建一个事件过滤器
- 30. 过滤掉没有标记的事件
我觉得'nanoTime'会更适合:http://stackoverflow.com/questions/351565/system-currenttimemillis-vs-system-nanotime – tilois
我用'System.currentTimeMillis()'因为据我所知是最轻的方法,即使不是单调和精确。我的时间片大约一秒左右,我认为是可以的。当然我需要非常精确的时间'nanoTime'是一种很好的选择 – miv
我推荐'nanoTime'的原因并不是因为'currentTimeMillis'缺乏精确度,而是因为它是挂钟时间并且可以改变(例如夏时制)因此我不会推荐它测量_elapsed_时间。 – tilois