HashMap-получение первого значения ключа
Ниже приведены значения, содержащиеся в HashMap
statusName {Active=33, Renewals Completed=3, Application=15}
Java-код для получения первого ключа (т. е. активного)
Object myKey = statusName.keySet().toArray()[0];
Как мы можем собрать первый ключ " значение "(т. е. 33), я хочу сохранить как" ключ", так и" значение " в отдельной переменной.
8 ответов:
вы можете попробовать это:
Map<String,String> map = new HashMap<>(); Map.Entry<String,String> entry = map.entrySet().iterator().next(); String key = entry.getKey(); String value = entry.getValue();имейте в виду,
HashMapне гарантирует порядок вставки. ИспользуйтеLinkedHashMapсохранить порядок.например:
Map<String,String> map = new LinkedHashMap<>(); map.put("Active","33"); map.put("Renewals Completed","3"); map.put("Application","15"); Map.Entry<String,String> entry = map.entrySet().iterator().next(); String key= entry.getKey(); String value=entry.getValue(); System.out.println(key); System.out.println(value);выход:
Active 33
чтобы получить" первое " значение:
map.values().toArray()[0]чтобы получить значение "первый ключ":
map.get(map.keySet().toArray()[0])Примечание: выше код протестирован и работает.
Я говорю "первый", потому что записи HashMap не упорядочены.
однако LinkedHashMap повторяет свои записи в том же порядке, как они были вставлены - вы можете использовать это для реализации карты, если порядок вставки важен.
как мы можем собрать первый ключ " значение "(т. е. 33)
С помощью
youMap.get(keyYouHave), вы можете получить его значение.хотите сохранить как "ключ", так и" значение " в отдельной переменной
Да, вы можете назначить переменной.
Подождите......... это еще не конец.
Если вы(бизнес-логика) находятся в зависимости от порядка вставки и извлечения, вы увидите странные результаты. Карты нет заказанные они не будут хранить в порядке. Пожалуйста, имейте это в виду. Используйте некоторые альтернативы, чтобы сохранить ваш заказ. Наверное
LinkedHashMap
обратите внимание, что вы должны отметить, что ваш логический поток никогда не должен полагаться на доступ к
HashMapэлементов в некотором порядке, проще говоря, потому чтоHashMaps не заказываютсяCollectionS и это не то, что они призваны делать. (Вы можете прочитать больше о коллекциях oder и sorter в этот пост).назад к сообщению, вы уже сделали половину работы, загрузив первый элемент ключа:
Object myKey = statusName.keySet().toArray()[0];просто позвони
map.get(key)чтобы получить соответствующее значение:Object myValue = statusName.get(myKey);
помните, что порядок вставки не соблюдается в карте вообще говоря. Попробуйте это :
/** * Get the first element of a map. A map doesn't guarantee the insertion order * @param map * @param <E> * @param <K> * @return */ public static <E,K> K getFirstKeyValue(Map<E,K> map){ K value = null; if(map != null && map.size() > 0){ Map.Entry<E,K> entry = map.entrySet().iterator().next(); if(entry != null) value = entry.getValue(); } return value; }Я использую это только тогда, когда я уверен, что это
map.size() == 1.
вы также можете попробовать это для получения всей первой записи,
Map.Entry<String, String> entry = map.entrySet().stream().findFirst().get(); String key = entry.getKey(); String value = entry.getValue();это чтобы получить только ключ от первой записи,
String key = map.entrySet().stream().map(Map.Entry::getKey).findFirst().get(); // or better String key = map.keySet().stream().findFirst().get();этого, чтобы получить только значение первой записи
String value = map.entrySet().stream().map(Map.Entry::getValue).findFirst().get(); // or better String value = map.values().stream().findFirst().get();кроме того, если вы знаете, что делаете, и хотите получить второй (то же самое для третьего и т. д.) элемента карты, вы должны попробовать это,
Map.Entry<String, String> entry = map.entrySet().stream().skip(1).findFirst().get(); String key = map.keySet().stream().skip(1).findFirst().get(); String value = map.values().stream().skip(1).findFirst().get();
вы также можете попробовать ниже:
Map.Entry<String, Integer> entry = myMap.firstEntry(); System.out.println("First Value = " + entry);
Comments