Создание метода для проверки наличия значения в универсальном HashMap в Java?

Я пытался создать общий метод для проверки наличия элемента в HashMap. Достаточно простая концепция, но Java не нравится то, что я пытаюсь сделать. Это вообще возможно? Это была моя попытка.

private static boolean inMap(String file, HashMap<String, Object> map) {
    for (Map.Entry<String, Object> entry : map.entrySet()) {
        if (entry.getKey().equals(file)) return true;
    }
    return false;
}

Это вызывается в следующем разделе кода:

private static Map<String, String> files = new HashMap();
private static Map<String, BufferedImage> images = new HashMap();
private static Map<String, Texture> textures = new HashMap();
private static Map<String, Model> models = new HashMap();

public static TexturedModel loadOBJModel(String file) {
    if (inMap(file, files)) ...
}

public static Texture loadTexture(String file) {
    if (inMap(file, textures)) ...
}

Я хотел, чтобы этот метод был универсальным для сохранения кода и простоты, так как у меня есть 4 разных HashMap для проверки. Все они являются ключами String, но все они имеют разные типы значений, как показано выше.

Если есть способ сделать этот универсальный, приветствуется любая помощь!

Почему вы не можете использовать files.containsKey('someStringKey'); и то же самое для других?

Raf 08.11.2018 02:55

@Raf, напишите ответ, пожалуйста

Kris Rice 08.11.2018 03:00

Уже есть вопрос как пользоваться Hashmap.containsKey() см. Здесь stackoverflow.com/questions/3626752/…

Raf 08.11.2018 03:06

Вы действительно хотите узнать, есть ли у вас ключ? Когда я прочитал ваш вопрос, я подумал, что вы хотите увидеть, содержит ли карта значение.

Katie.Sun 08.11.2018 03:19
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
4
1 317
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Давайте воспользуемся здесь Map.get(Object) и тем фактом, что он вернет null, если ключ не существует.

public static boolean contains(Map<?, ?> inMap, Object key) {
    return inMap.get(key) == null;
}

Это также позволит использовать время доступа к хэш-картам O (1), не полагаясь на цикл O (n) над записями.

Вам не нужно использовать .get(), достаточно containsKey() и O(1)

Raf 08.11.2018 02:58

Отлично спасибо. работает отлично!

Kris Rice 08.11.2018 02:58

Сообщение @Raf в качестве ответа, даже не знал, что это существует.

Kris Rice 08.11.2018 02:59

вы можете написать общий метод, используя параметр типа T, вы можете использовать этот метод для всех различных типов HashMap

public static <T> boolean contains(String file, T a) {
    return a.keySet().contains(file); //or a.containsKey(file);

}
Ответ принят как подходящий

Почему вы заново изобретаете колесо? Map имеет containsKey(), который работает именно так, как вы хотите.

Другие вопросы по теме