HashMap - получение значения первого ключа
Ниже приведены значения, содержащиеся в HashMap
statusName {Active=33, Renewals Completed=3, Application=15}
Java-код для получения первого ключа (i.e Active)
Object myKey = statusName.keySet().toArray()[0];
Как мы можем собрать первый ключ "Значение" (т.е. 33), я хочу сохранить как "ключ", так и "значение" в отдельной переменной.
Ответы
Ответ 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);