Я хочу создать карту большого диапазона, в которой ключи, соответствующие их номерам, будут сопоставлены с сегментами, например:
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);" ....
Есть предложения, пожалуйста, возможно, какой-нибудь алгоритм?