加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-14 23:59:32 所属栏目:Java 来源:网络整理
导读:我有以下内容: fruitMap.remove(fruitId,fruitProperties); fruitMap是: private MapFruitId,FruitProperties fruitMap = new HashMapFruitId,FruitProperties(); 当我尝试构建我的代码时,我得到一个: ERRORThe method remove(Object) in the type MapMyI
我有以下内容:
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);
    }
}

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读