从Java HashMap移除零值

时间:2018-11-23 07:18:02

标签: java hashmap

我有一个带有浮点值的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

3 个答案:

答案 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)

请注意不要比较整数值。 doublefloat不应与==进行比较。这应该是规则,因为这是精确的信息,== 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);