【发布时间】:2017-01-03 18:08:06
【问题描述】:
我有这个代码:
private ConcurrentMap<String, Integer> myMap = new ConcurrentHashMap<>();
@Scheduled(fixedDelay = 600_000)
public void foo(){
myMap.values().stream().
filter(predicate()).
forEach(this::remove);
}
public void insert(String str, Integer value){
myMap.put(str, value);
}
如果在迭代此映射时会发生什么 - 有人将新值放入其中或从中删除现有值?
【问题讨论】:
-
你有什么尝试吗?
-
@BuhakeSindi - 不确定我明白你在问什么
-
我的意思是您是否创建了一个与您的场景相匹配的测试用例。
-
@BuhakeSindi - 哦...我不知道如何编写这样的测试
-
不清楚
this::remove应该做什么。这意味着 your 类中必须有一个remove方法接收一个值来执行what?再次遍历地图,以删除该值?请考虑使用myMap.values().removeIf(predicate());...
标签: java collections concurrency java-8 java-stream