【发布时间】:2018-10-30 13:51:30
【问题描述】:
我有这个结构
TreeMap<String,Map<String,String>> map;
我想删除一个键找到的 Map 中的键值对之一。 我试过了:
map.get(key).remove(key2);
但它会抛出 NullPointerException。 要找到我尝试过的问题:
Map<String,String> aux = map.get(key);
aux.remove(key2);
并看到 map.get 只返回 null。
有什么解决办法吗? 提前谢谢!
【问题讨论】:
-
好吧,如果
map.get(key)返回null,这意味着外部映射中没有该键的元素 - 就这么简单。如果您认为元素应该在地图中,我们需要查看一些示例,即您将哪些数据放入地图中,您使用什么来查找元素以及您是否提供了自定义比较器。 -
@Thomas 不是那么简单。 TreeMap 支持 null 值,所以 null 并不意味着没有映射。可能有一个映射
foo -> null -
@Michael,好吧,“该键没有元素”并不是说是否存在映射。我想说
null不是 一个元素,所以即使null被映射,该键也没有元素。 -
@Thomas 对不起,但客观上你错了。在具有到 null 的映射和没有映射之间存在功能差异。如果我有一个到 null 的映射,
containsValue(null)将返回 true。如果我不这样做,它就不会。如果我有一个到 null 的映射,values()集合将包含 null。如果我不这样做,它就不会。如果我有一个到 null 的映射,则值的键的getKey将返回 true。如果我不这样做,它将返回 false。这基本上正是添加Optional的原因。 -
@Michael 你是对的,尤其是为什么
Optional会在这里有所帮助。但是,这取决于您是否将null视为一个元素。在 OP 的情况下,键是否映射到null或条目根本不存在都没有关系。在任何情况下map.get(key)都会返回null。从这个意义上说,它实际上很简单:该键没有有意义的值/元素。原因不是那么简单,即没有映射或null已放入映射中 - 这就是Optional派上用场的地方(如果您需要以不同方式处理这两种情况)。
标签: java dictionary treemap