Я пытался создать общий метод для проверки наличия элемента в 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, но все они имеют разные типы значений, как показано выше.
Если есть способ сделать этот универсальный, приветствуется любая помощь!
@Raf, напишите ответ, пожалуйста
Уже есть вопрос как пользоваться Hashmap.containsKey() см. Здесь stackoverflow.com/questions/3626752/…
Вы действительно хотите узнать, есть ли у вас ключ? Когда я прочитал ваш вопрос, я подумал, что вы хотите увидеть, содержит ли карта значение.




Давайте воспользуемся здесь 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 в качестве ответа, даже не знал, что это существует.
вы можете написать общий метод, используя параметр типа T, вы можете использовать этот метод для всех различных типов HashMap
public static <T> boolean contains(String file, T a) {
return a.keySet().contains(file); //or a.containsKey(file);
}
Почему вы заново изобретаете колесо? Map имеет containsKey(), который работает именно так, как вы хотите.
Почему вы не можете использовать
files.containsKey('someStringKey');и то же самое для других?