我有一个带有浮点值的HashMap
。
HashMap<Integer,Float> map : {(1,0.0),(2,0.0),(3,2000.0),(4,3000.0)}
我要删除其中所有值为零的条目。 结果应该是:
map : {(3,2000.0),(4,3000.0)}
更新:我正在使用Java 7
答案 0 :(得分:3)
从Java 8开始,您可以简单地使用
map.values().removeIf(f -> f == 0f);
根据JavaDoc,这将删除map
中满足给定谓词的所有元素。
编辑
在更新问题时,您正在使用Java 7,请在Iterator
上使用values()
:
Iterator<Float> iterator = map.values().iterator();
while (iterator.hasNext()) {
if (iterator.next() == 0f) {
iterator.remove();
}
}
之所以有效,是因为根据JavaDoc map.values()
返回此映射中包含的值的
Collection
视图。的 集合由地图支持,因此反映了对地图的更改 在收藏中,反之亦然。
答案 1 :(得分:0)
for (Iterator<Map.Entry<Integer,Float>> it = map.entrySet().iterator();
it.hasNext();)
{
Map.Entry<Integer, Float> entry = it.next();
if (entry.getValue() == 0.0) {
it.remove();
}
}
答案 2 :(得分:0)
请注意不要比较整数值。 double
和float
不应与==
进行比较。这应该是规则,因为这是精确的信息,== 0
应该掩盖错误。像-10E-12 <= float <= 10E-12
(增量范围)。
// Java 7
Iterator<Float> it = map.values().iterator();
while (it.hasNext()) {
if (it.next().compareTo(0f) == 0)
it.remove();
}
// Java 8
map.values().removeIf(value -> Float.compare(value, 0) == 0);