返回Map中的所有近似匹配值

时间:2012-09-13 21:01:14

标签: java

我有每个键都是String的映射。

要访问某个值,我可以使用.get的{​​{1}}方法。如果我想返回与键匹配的任何内容,例如:Map,请获取包含字符串"one, onetwo, onetwothree"的所有值,因此在这种情况下返回"two"。这可以使用"onetwo, onetwothree"吗?

我当前正在使用List并遍历每个String并检查String是否包含我正在搜索的值。

3 个答案:

答案 0 :(得分:1)

在任何Map类(afaik)上都没有这样的方法。您可以迭代密钥然后检查片段的包含,或使用完全不同的数据结构。我想是trie - 地图就可以了。


编辑:
你目前所做的事情应该适用于99%的所有案例。如果您要处理大量数据,请使用full text indexing。 (可以使用Suffix trees

完成

答案 1 :(得分:1)

使用HashMap,您必须遍历所有键,并且只要一个键与您的模式匹配,然后收集该值并继续操作直到完成。
使用TreeMap,您可以按排序顺序获取密钥,以便您可以使用此属性进行更有效的搜索 但我认为您应该切换到不同的数据结构。 @zeller的trie也指出了你想做的事情

答案 2 :(得分:0)

正如其他人所说,java集合API中没有方法可以实现这一点。 这是通过迭代地图的键

来实现的
    HashMap<String, String> map = new HashMap<String, String>();
    map.put("onesample", "1");
    map.put("onetwo", "2");
    map.put("onetwothree", "3");

    for(Entry<String, String> en: map.entrySet()) {
        if(en.getKey().contains("two")){
            System.out.println(en.getKey());
        }
    }
}