Я пытаюсь получить подходящую строку соответствия, подходящую для работы с существующими структурами данных Java. Это довольно медленно, но любые предложения по улучшению его производительности будут приветствоваться.
Пример данных будет выглядеть следующим образом:
Key | V
---------------------
0060175559138 | VIP
--------------
006017555 | National
--------------
006017 | Local
---------------
0060 | X
--------------
поэтому лучший поиск соответствия на ключе = 0060175552020 вернется 006017555
Один из способов, о котором я могу думать, состоит в том, чтобы иметь несколько TreeMaps, используя хеширование, чтобы переадресовывать данные на разные карты, тем самым уменьшая область поиска.
private final TreeMap<String, V> index;
public Set<V> syncBestMatch(String key) {
Entry<String,V> entry = index.headMap(key, true)
.descendingMap().entrySet().stream()
.filter(e -> isPartiallyOrFullyMatching(key, e.getKey()))
.findFirst()
.orElseThrow(() -> new NoMatchException("No match found"));
Set<V> results = new HashSet<>();
results.add(entry.getValue());
return results;
}