Подтвердить что ты не робот

HashMap - получение значения первого ключа

Ниже приведены значения, содержащиеся в HashMap

statusName {Active=33, Renewals Completed=3, Application=15}

Java-код для получения первого ключа (i.e Active)

Object myKey = statusName.keySet().toArray()[0];

Как мы можем собрать первый ключ "Значение" (т.е. 33), я хочу сохранить как "ключ", так и "значение" в отдельной переменной.

4b9b3361

Ответ 1

Вы можете попробовать следующее:

 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

Ответ 2

Чтобы получить "первое" значение:

map.values().toArray()[0]

Чтобы получить значение "первого" ключа:

map.get(map.keySet().toArray()[0])

Примечание. Над кодом проверено и работает.

Я говорю "сначала", потому что записи HashMap не упорядочены.

Однако LinkedHashMap выполняет итерацию своих записей в том же порядке, в котором они были вставлены, - вы можете использовать это для своей реализации карты, если важно, чтобы порядок вставки был важным.

Ответ 3

Java 8 способ сделать,

String firstKey = map.keySet().stream().findFirst().get();

Ответ 4

как мы можем собрать первый ключ "Значение" (т.е. 33)

Используя youMap.get(keyYouHave), вы можете получить его значение.

хотите сохранить оба "ключа" и "значение" в отдельной переменной

Да, вы можете назначить это переменной.

Подождите......... это не конец.

Если вы (бизнес-логика) в зависимости от порядка вставки и извлечения, вы увидите странные результаты. Карта не заказывается, они не будут храниться в заказе. Пожалуйста, помните об этом. Используйте альтернативу для сохранения своего заказа. Вероятно, LinkedHashMap

Ответ 5

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

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();

Ответ 6

Помните, что порядок вставки не соблюдается на карте вообще. Попробуйте следующее:

    /**
     * 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.

Ответ 7

Обратите внимание, что вы должны заметить, что ваш логический поток никогда не должен полагаться на доступ к элементам HashMap в некотором порядке, просто поставьте, потому что HashMap не упорядочены Collection, и это не то, на что они направлены. (Вы можете больше узнать о коллекциях odered и sorter в этом сообщении).

Вернуться к сообщению, вы уже выполнили половину задания, загрузив первый ключ элемента:

Object myKey = statusName.keySet().toArray()[0];

Просто позвоните map.get(key), чтобы получить соответствующее значение:

Object myValue = statusName.get(myKey);

Ответ 8

Совершенствуйся, ответь. Поскольку findFirst() возвращает значение Optional, рекомендуется проверить, существует ли значение.

 var optional = pair.keySet().stream().findFirst();

 if (!optional.isPresent()) {
    return;
 }

 var key = optional.get();

Также некоторые отметили, что найти первый ключ HashSet ненадежно. Но иногда у нас есть пары HashMap; т.е. в каждой карте у нас есть один ключ и одно значение. В таких случаях быстро найти первый ключ в такой паре.

Ответ 9

Вы также можете попробовать:

Map.Entry<String, Integer> entry = myMap.firstEntry();
System.out.println("First Value = " + entry);