为了账号安全,请及时绑定邮箱和手机立即绑定

如何在任何 Java 映射实现上测试空键?

如何在任何 Java 映射实现上测试空键?

MM们 2021-09-12 20:40:51
我想确保作为参数传递给方法的 Map 不包含空键。人们会假设以下会做:if ( map.containsKey(null) ) …但是,如果该方法传递了类似 a 的东西,那将会中断TreeMap,根据一般的 Java Map 合同,它可以自由地拒绝带有 NPE 的空键。在接受任何 Map 实现时,我们是否有一种明智的方法来测试空键?
查看完整描述

3 回答

?
拉丁的传说

TA贡献1789条经验 获得超8个赞

boolean hasAnyNull = yourMap.keySet()
      .stream()
      .anyMatch(Objects::isNull);


查看完整回答
反对 回复 2021-09-12
?
慕森王

TA贡献1777条经验 获得超3个赞

boolean hasNullKey(Map<?,?> map) {

  try {

    return map.containsKey(null);

  } catch (NullPointerException e) {

    return false;

  }

}

请注意,这也会false在map它自己是时返回null,这可能是也可能不是。


查看完整回答
反对 回复 2021-09-12
?
慕标5832272

TA贡献1966条经验 获得超4个赞

使用instanceof发现其一个TreeMap


boolean hasNullKey(Map<?,?> map) {

    return map instanceof TreeMap ? false :map.containsKey(null);

}


查看完整回答
反对 回复 2021-09-12
  • 3 回答
  • 0 关注
  • 158 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信