Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Java HashMap中删除零值_Java_Hashmap - Fatal编程技术网

从Java HashMap中删除零值

从Java HashMap中删除零值,java,hashmap,Java,Hashmap,我有一个带有浮点值的HashMap HashMap<Integer,Float> map : {(1,0.0),(2,0.0),(3,2000.0),(4,3000.0)} 更新:从Java8开始,我正在使用Java7 map.values().removeIf(f -> f == 0f); 根据谓词,这将删除map中满足给定谓词的所有元素 编辑 更新您的问题时,您正在使用Java 7,请在值上使用迭代器: 这是因为根据map.values 返回此映射中包含的值的集合视图。

我有一个带有浮点值的HashMap

HashMap<Integer,Float> map : {(1,0.0),(2,0.0),(3,2000.0),(4,3000.0)}

更新:从Java8开始,我正在使用Java7

map.values().removeIf(f -> f == 0f);
根据谓词,这将删除map中满足给定谓词的所有元素

编辑 更新您的问题时,您正在使用Java 7,请在值上使用迭代器:

这是因为根据map.values

返回此映射中包含的值的集合视图。这个 集合由映射支持,因此映射的更改会反映出来 在集合中,反之亦然


注意比较不是整数值。double和float不应与==进行比较。这应该是一条规则,因为这是精确的vlue,并且==0应该是smth。比如-10E-12你说得对!但是我在我的Android studio中使用Java7。我已经更新了我的问题。@SandeepYohans我已经扩展了我的答案。这个代码看起来比我的更简单!谢谢或者:it.next.compareTo0fn没有调用Float.compare或compareTo的点,这仅仅意味着==。它当然不使用delta。
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();
     }
   }
map.values().removeIf(f -> f == 0f);
Iterator<Float> iterator = map.values().iterator();
while (iterator.hasNext()) {
    if (iterator.next() == 0f) {
        iterator.remove();
    }
}
// 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);