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

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

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

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

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

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

76 голосов | спросил Prabu 7 +04002014-10-07T10:54:37+04:00312014bEurope/MoscowTue, 07 Oct 2014 10:54:37 +0400 2014, 10:54:37

7 ответов


0

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

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

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

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

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

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

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

ответил Bohemian 7 +04002014-10-07T10:59:34+04:00312014bEurope/MoscowTue, 07 Oct 2014 10:59:34 +0400 2014, 10:59:34
0

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

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

ответил whoami 16 AM00000070000003231 2017, 07:28:32
0
  

как мы можем получить первый ключ "Value" (т.е. 33)

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

  

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

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

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

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

ответил ꜱᴜʀᴇꜱʜ ᴀᴛᴛᴀ 7 +04002014-10-07T10:59:00+04:00312014bEurope/MoscowTue, 07 Oct 2014 10:59:00 +0400 2014, 10:59:00
0

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

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

ответил Maxime Claude 8 32017vEurope/Moscow11bEurope/MoscowWed, 08 Nov 2017 20:41:21 +0300 2017, 20:41:21
0

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

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();
ответил George Siggouroglou 22 PM00000050000004731 2018, 17:32:47
0

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

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

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

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

Object myValue = statusName.get(myKey);
ответил tmarwen 7 +04002014-10-07T11:09:53+04:00312014bEurope/MoscowTue, 07 Oct 2014 11:09:53 +0400 2014, 11:09:53
0

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

Map.Entry<String, Integer> entry = myMap.firstEntry();
System.out.println("First Value = " + entry);
ответил Veera 31 Jam1000000amTue, 31 Jan 2017 09:57:27 +030017 2017, 09:57:27

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132