从Java HashMap中删除零值
我有一个带有浮点值的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<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);