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