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



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



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


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



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


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

592   8  

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 повторяет свои записи в том же порядке, как они были вставлены - вы можете использовать это для реализации карты, если порядок вставки важен.

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

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

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

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

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

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

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

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

обратите внимание, что вы должны отметить, что ваш логический поток никогда не должен полагаться на доступ к HashMap элементов в некотором порядке, проще говоря, потому что HashMap s не заказываются 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

    Ничего не найдено.