我正在寻找一个存储键值对的集合,其中值应根据键startswith
条件返回。
例如对于给定的集合:(a,123) (ab,234) (abcd,5434)
如果我map.get(a)
,它应该给我{123,234,5434}
数组,如果我map.get(ab)
同样,它应该给我{234,5434}
而不是{123}
案件。
因此,它会查找具有完全匹配关键字或以字母开头的所有值。
有什么建议?如果有可用的东西或者我可以写点什么?
谢谢!
答案 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>
答案 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());