【发布时间】:2018-05-31 04:46:58
【问题描述】:
我想创建一个大范围的地图,将根据他们的数字映射到存储桶的键,例如:
NavigableMap<String, String> map = new TreeMap<>();
map.put("var2#" + 0L, "out0"); // "var2#0..100 => out0
map.put("var2#" + 100L, "out1"); // "var2#100..200" => out1
map.put("var2#" + 200L, "out2"); // "var2#200..300" => out2
map.put("var2#" + 300L, "out3"); // "var2#300..+" => out3
这意味着如果一个新键将到达,值 res 应该是"var2#150" ==> "out1"
我试图做的是使用排序地图,一切都在地图内的数字范围内工作
类似:
String out1 = map.floorEntry("var2#" + 150L).getValue(); //out1 , works!
,但是如果发送 var2#2000 ,而不是获取 res "out3" ,我得到了 "out2" ,依此类推...
String res = map.floorEntry("var2#" + 2000L).getValue();
Syso(res) ==> out2 , BUT I expected result => "out3"
// because it is bigger that the range.
PS:
It is very large map with prefix of some "string" and comes after typed
long number . Eg. "var1#100, var1#200 , ...bla1#1000 , bla5#2000....
另一个问题 - 当我在不同的键上具有相同的长值时,我希望在字符串上进行第一次匹配,然后在数字上进行 ...
map.put("var1#" + 200L, "out0");
map.put("var2#" + 200L, "out1");
map.put("var3#" + 200L, "out2");
map.put("var4#" + 200L, "out3");
String out1 = map.floorEntry("var2#" + 150L).getValue();
System.out.println("====> " + out1); //expected out1 , because only match of "var2
String out3 = map.floorEntry("var2#" + 250L).getValue(); //expected out1 , because only match of "var2
System.out.println("====> " + out3);" ....
请有任何建议,也许是一些算法?
【问题讨论】: