带有键查找的java键值对"从"

时间:2015-05-19 15:43:14

标签: java algorithm collections

我正在寻找一个存储键值对的集合,其中值应根据键startswith条件返回。
例如对于给定的集合:(a,123) (ab,234) (abcd,5434)

如果我map.get(a),它应该给我{123,234,5434}数组,如果我map.get(ab)同样,它应该给我{234,5434}而不是{123}案件。

因此,它会查找具有完全匹配关键字或以字母开头的所有值。
有什么建议?如果有可用的东西或者我可以写点什么?
谢谢!

4 个答案:

答案 0 :(得分:5)

您可以使用TreeMap<String,Integer>方法使用TreeMap<String,Integer> map = new TreeMap<String,Integer>(); map.put("a", 123); map.put("ab", 234); map.put("abcd", 5434); String myKey = "ab"; for (Map.Entry<String,Integer> e : map.tailMap(myKey).entrySet()) { if (!e.getKey().startsWith(myKey)) { break; } System.out.println(e.getValue()); } 执行此操作,并在密钥与输入匹配时迭代结果:

<a href="http://example.com"><img src="http://badge.png"></a>

tailMap

答案 1 :(得分:1)

使用TreeMap,并创建一个特殊的迭代器,映射到您的TreeMap并搜索您要查找的字符串模式

答案 2 :(得分:1)

对dasblinkenlight的解决方案稍作处理: Java 8流API在循环中提供了很好的触摸:

        calculate: function () {
            var elm = document.getElementById(this.config.target.id);
            var rect = elm.getBoundingClientRect();
            this.data.br.width = rect.width;
            this.data.br.height = rect.height;
            this.data.br.left = rect.left;
            this.data.br.top = rect.top;
            if (this.data.br.left <= this.data.left) {
                this.data.br.left = -Math.abs(this.data.left - this.data.br.left);
            } else {
                this.data.br.left = Math.abs(this.data.br.left - this.data.left);
            }
            if (this.data.br.top <= this.data.top) {
                this.data.br.top = -Math.abs(this.data.top - this.data.br.top);
            } else {
                this.data.br.top = Math.abs(this.data.br.top - this.data.top);
            }
        },

答案 3 :(得分:0)

根据slanec的评论,我查看了Apache Commons Collections4中的PatriciaTrie,它确实有一种方法可以完全符合OP的要求:

import org.apache.commons.collections4.*;
import org.apache.commons.collections4.trie.*;

Trie<String,Integer> t = new PatriciaTrie<>();
t.put("a", 123);
t.put("ab", 234);
t.put("abcd", 5434);
System.out.println(t.prefixMap("ab").values());