当前位置:  开发笔记 > 编程语言 > 正文

Java:许多键映射之一

如何解决《Java:许多键映射之一》经验,为你挑选了1个好方法。

我有一个Map,它可能包含以下键之一

Map map = getMap();

我现在想检查是否设置了其中一个键.我目前的做法是连锁多元化map.getOrDefault(...)

Address address = new Address();
address.setStreet(map.getOrDefault("STORE_STREET"
    , map.getOrDefault("OFFICE_STREET", ...));

或者检查地图中是否存在每个密钥.

if(map.containsKey("STORE_STREET")){
   address.setStreet(map.get("STORE_STREET"));
}else if(map.containsKey("OFFICE_STREET")){
   address.setStreet(map.get("OFFICE_STREET"));
}

有没有办法让这更容易/更好阅读?不幸的是,地图是这样给出的.



1> Holger..:

通常情况下,getOrDefault这将是一种方法,但如果您有多个替代键,这不仅会影响可读性,还会将性能优势转化为相反的方式.使用以下代码:

address.setStreet(map.getOrDefault("STORE_STREET", map.getOrDefault("OFFICE_STREET", ...));

在查看是否存在主键(或具有更高优先级的键)之前,您首先要查找备用键,以获得后备值.

解决方案就是

Stream.of("STORE_STREET", "OFFICE_STREET", ...)
      .map(map::get)
      .filter(Objects::nonNull)
      .findFirst()
      .ifPresent(address::setStreet);

当执行这一次时,由于较高的初始化开销,其性能可能小于简单的循环,但是,性能差异将是无关紧要的.对于频繁执行,没有显着差异,所以你应该根据可读性来决定(当然这是主观的).

推荐阅读
重庆制造漫画社
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有