【发布时间】:2016-06-21 13:34:45
【问题描述】:
我有一段代码维护对具有给定 ID 的样本所做的修订映射:
private Map<Long, SampleId> sampleRevisionMap = new HashMap<>();
在维护这一点的同时,其他线程可以调用以获取自给定修订号以来所做的所有更改。要找到相关的 ID,我会这样做
public Set<SampleId> getRevisionIDs(long clientRevision) {
return sampleRevisionMap.entrySet().stream()
.filter(k -> k.getKey() > clientRevision)
.map(entry -> entry.getValue())
.collect(Collectors.toSet());
}
简而言之,给我所有键值高于阈值的值。
有没有更好的方法来使用有序映射,即 java.utils.TreeMap?
【问题讨论】:
-
请注意,TreeMap 是不同步的。您是说所有线程都可以跳入读取键/值对。你需要使用
Map syncMap = Collections.synchronizedSortedMap( treeMap ) -
另请注意,来自
synchronizedSortedMap的返回映射将是可变的,其他线程可以在一个线程对其进行迭代时对其进行修改(或其尾部映射的值)。迭代线程必须在其上同步迭代它。请参阅synchronizedSortedMapdocumentation。