Как проверить, начинается ли ключ на карте с заданным значением 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 даст вам класс, чтобы включить метод и сохранить код, специфичный для карты, из вашего метода, что снижает сложность и делает код более естественным для чтения.