java - 使用多个 map 实现搜索

标签 java

我有一个带有 Guava 的多重映射,我想用多个映射来实现它,以便进行键值搜索:

String key = "first-key";
        Multimap<String, String> map = ArrayListMultimap.create();

        map.put(key, "firstValue");
        map.put(key, "secondValue");
        map.put(key, "thurdValue");

        map.putAll("sec-key", Sets.newHashSet("am", "are", "is"));

        for (String name : map.keySet()) {  
           System.out.println("key: " + name); 
        }

我尝试过这个:

Map<String, String> map1 = new HashMap<String,String>();
        Map<String, Map<String, String>> map2 = new HashMap<String, Map<String, String>>();
        Map<String, Map<String, Map<String, String>>> map3 = new HashMap<String, Map<String, Map<String, String>>>();

        map3.put("AF", Map.of("Afghanistan", Map.of("AFG", "004")));

例如,我如何搜索键 Afghanistan 并获取值 AFG

有没有更好的方法来实现这个?

最佳答案

我认为在您的情况下使用多重映射不必要地使任务复杂化。为什么不定义一个存储所有值的类并使用一个简单的映射?

假设您的示例显示阿富汗的 ISO 3166 标准值,我将创建一个国家/地区:

static class Country{
    String name;
    String alpha2;
    String alpha3;
    String numericCode;

    public Country(String name, String alpha2, String alpha3, String numericCode) {
        this.name = name;
        this.alpha2 = alpha2;
        this.alpha3 = alpha3;
        this.numericCode = numericCode;
    }
    //getters and setters
}

并使用简单的 map Map<String, Country> myMap = new HashMap<>();

    Map<String, Country> myMap = new HashMap<>();
    myMap.put("AF", new Country("Afghanistan", "AF", "AFG", "004"));
    myMap.put("IR", new Country("Iran", "IR", "IRN", "364"));
    myMap.put("IN", new Country("India", "IN", "IND", "356"));
    myMap.put("CN", new Country("China", "CN", "CHN", "156"));

获取搜索字符串“阿富汗”的 ALPHA_3 代码

Optional<Country> search = myMap.values().stream().filter(c -> c.name.equals("Afghanistan")).findFirst();
System.out.println(search.isPresent()? search.get().getAlpha3(): "No results");

如果您有兴趣使用第三方库,请查看 Javatuples

使用javatuples,上面的可以重写如下

   Map<String, Quartet> myMap = new HashMap<>();
   myMap.put("AF", Quartet.with("Afghanistan", "AF", "AFG", "004"));
   myMap.put("IR", Quartet.with("Iran", "IR", "IRN", "364"));
   myMap.put("IN", Quartet.with("India", "IN", "IND", "356"));
   myMap.put("CN", Quartet.with("China", "CN", "CHN", "156"));
   Optional<Quartet> result = myMap.values().stream().filter(q -> q.contains("Afghanistan")).findFirst();
   System.out.println(result.isPresent() ? result.get().getValue2():"No results");

关于java - 使用多个 map 实现搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58266765/

相关文章:

java - 字符串的正确日期格式

Java断言双包含序列

java - 正则表达式确定文件是否是sql文件

java - 我应该如何循环这个程序?

java - 简单的字符串比较问题

java - 启动时获取 java.lang.NoClassDefFoundError

java - Spring 表单 Controller 泛化

java - 将数据传递到 jquery 的 getJSON() 时出现问题 - 不接受 map

java - 非 react 性客户端(RestTemplate)是否可以使用 react 性 REST API(WebFlux)

java - 初学者 Java 问题 - "Breakout"游戏。我的下一步是什么?