如何将Java 8 map.remove转换为Java 1.6?

前端之家收集整理的这篇文章主要介绍了如何将Java 8 map.remove转换为Java 1.6?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有以下内容
fruitMap.remove(fruitId,fruitProperties);

fruitMap是:

private Map<FruitId,FruitProperties> fruitMap = new HashMap<FruitId,FruitProperties>();

当我尝试构建我的代码时,我得到一个:

ERROR
The method remove(Object) in the type Map<MyImplementation.FruitId,FruitProperties>
is not applicable for the arguments (Map<MyImplementation.FruitId,FruitProperties>)

有什么问题?

请注意,thiis调用是在我的“FruitImplementation”类中的方法“removeFruit()”内.

解决方法

remove(key,value)方法如果当前映射到value,则删除key的条目.该方法是在Java 1.8中添加的. Map接口的Javadoc提到了以下默认实现:
if (map.containsKey(key) && Objects.equals(map.get(key),value)) {
     map.put(key,newValue);
     return true;
} else
     return false;

由于Objects类仅在Java 1.7中添加,因此对于Java 1.6,您必须自己编写相等性测试.因此,如果您不需要方法的返回值,则可以将map.remove(key,value)替换为:

if (map.containsKey(key) {
    Object storedValue = map.get(key);
    if (storedValue == null ? value == null : storedValue.equals(value)) {
        map.remove(key);
    }
}

请注意,这不是线程安全的.如果从多个线程访问映射,则必须添加同步块.

猜你在找的Java相关文章