Как проверить, начинается ли ключ на карте с заданным значением String
Я ищу способ, например:
myMap.containsKeyStartingWith("abc"); // returns true if there a key starting with "abc" e.g. "abcd"
или
MapUtils.containsKeyStartingWith(myMap, "abc"); // same
Я задавался вопросом, знал ли кто-нибудь о простом способе сделать это
Спасибо
Ответы
Ответ 1
Это можно сделать со стандартным SortedMap
:
Map<String,V> tailMap = myMap.tailMap(prefix);
boolean result = (!tailMap.isEmpty() && tailMap.firstKey().startsWith(prefix));
Несортированные карты (например, HashMap
) не поддерживают внутреннюю поддержку префиксов, поэтому для тех, кому придется перебирать все ключи.
Ответ 2
На карте вы можете получить набор ключей, и в случае, если они являются String, вы можете перебирать элементы набора и проверять на startsWith("abc")
Ответ 3
Чтобы построить ответ Adel Boutros/комментарий об эффективности итерации ключей, вы можете инкапсулировать итерацию ключа в подкласс Map
или декоратор.
Расширение HashMap
даст вам класс, чтобы включить метод и сохранить код, специфичный для карты, из вашего метода, что снижает сложность и делает код более естественным для чтения.