【发布时间】:2019-04-20 04:10:07
【问题描述】:
HashMap<Integer, ArrayList<Integer>> cityMap = new HashMap<>();
...
for (ArrayList<Integer> list : cityMap.values()) {
int size = list.size();
if (size > 0) {
list.removeIf(i -> true);
}
}
我不太明白removeIf 在这种情况下做了什么。尤其是部分(i -> true)。谢谢你的解释。
【问题讨论】:
-
.values() 是一组列表,如果其中任何一个包含项目,则删除整个列表。
i -> true只是意味着“总是删除”。 -
在这种情况下,
list.clear()的表达方式非常复杂且效率低下。同样,int size = list.size(); if(size > 0) …是表示if(!list.isEmpty()) …的冗长方式。由于ArrayList总是可变的并且清除一个已经为空的列表没有任何效果,因此测试并不是真正必要的。您可以改用for (ArrayList<Integer> list : cityMap.values()) list.clear();。或者,如果你想引入 lambda 表达式:cityMap.values().forEach(list -> list.clear());或方法引用:cityMap.values().forEach(List::clear);。所有这些变体都是一样的。 -
有道理。谢谢。