[英]Key existence checking utility in Map
我正在使用以下代码检查Map
实例中是否存在键:
if (!map_instance.containsKey(key))
throw new RuntimeException("Specified key doesn't exist in map");
else
return map_instance.get(key);
我的问题是:
有没有实用工具或者Map
实现来简化上面的代码,比如:
custom_map.get(key,"Specified key doesn't exist in map");
我的目标是:如果key
不存在于 map 中,则 map 实现会抛出传递的字符串异常。
我不知道我的愿望是否合理?
(抱歉,如果我使用了错误的术语或语法,我仍在学习英语。)
我使用可选的 Java util 类,例如
Optional.ofNullable(elementMap.get("not valid key"))
.orElseThrow(() -> new ElementNotFoundException("Element not found"));
还有一种更好的方法可以实现这一目标:
return Objects.requireNonNull(map_instance.get(key), "Specified key doesn't exist in map");
优点:
缺点:
NullPointerException
- 有时NoSuchElementException
或自定义异常更可取需要 Java 8
在 Java 8 中,您可以使用Map
中的computeIfAbsent
,如下所示:
map.computeIfAbsent("invalid", key -> { throw new RuntimeException(key + " not found"); });
您可以查看来自 Apache commons 的配置映射。 它不实现Map
,但具有与一些 Helper 方法类似的接口,如getString
、 getStringArray
、 getShort
等。
通过此实现,您可以使用方法setThrowExceptionOnMissing(boolean throwExceptionOnMissing)
并可以捕获它并根据需要进行处理。
不完全是可配置的消息,但从我的角度来看,仅使用自定义消息抛出固定异常是没有意义的,因为异常类型本身取决于调用get
方法的上下文。 例如,如果您执行对用户的获取,异常将与此相关,可能UserNotFoundException
,而不仅仅是带有消息的RuntimeException
:在地图中找不到用户!
Java 中的 Map 不存在这样的方法。 当然,您可以通过扩展 Map 类或创建包含地图和tryGet
方法的包装类来创建它。
然而 C# 确实有这样一个方法: Directory.TryGetValue()
public class MyMap {
public Map<Object, Object> map = new HashMap<Object, Object>();
public Object tryGet(Object key, String msg) {
if(!map.containsKey(key))
throw new IllegalArgumentException(msg);
return map.get(key);
}
你这样做的方式就是要走的路。
作为旁注,您的代码没有多大意义,因为您将始终返回 true,也许您的意思是:
return map_instance.get(key);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.