HashMap 中如何获取第一个键和对应的值

下面是 HashMap 中包含的值

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

获取第一个Key (即Active) 的 Java 代码

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

我们如何收集第一个键“值” (即33),我想在单独的变量中存储“键”和“值”。

494320 次浏览

你可以试试这个:

 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
< p > 更新: 在Java 8或更高版本中获取第一个键
Optional<String> firstKey = map.keySet().stream().findFirst();
if (firstKey.isPresent()) {
String key = firstKey.get();
}

我们如何收集第一个键值(即33)

通过使用youMap.get(keyYouHave),你可以得到它的值。

想要存储“键”和“值”在单独的变量

是的,你可以把它赋值给一个变量。

等待 .........事情还没有结束。

如果您(业务逻辑)依赖于插入和检索的顺序,那么您将看到奇怪的结果。地图不是有序的,它们不会按顺序存储。请注意这一事实。使用一些替代方案来维护您的订单。可能是LinkedHashMap

要获得“first”值:

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

获取"first"键的值:

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

注意:以上代码已经过测试并正常工作。

我说“first”是因为HashMap条目没有排序。

然而,LinkedHashMap迭代其条目的顺序与它们被插入的顺序相同——如果插入顺序很重要,您可以将其用于映射实现。

注意,你应该注意你的逻辑流永远不能依赖于以某种顺序访问HashMap元素,简单地说,因为HashMap不是按Collections顺序排列的,这不是它们的目的。(你可以在这篇文章中阅读更多关于有序和排序集合的信息)。

回到文章中,通过加载第一个元素键,你已经完成了一半的工作:

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

只需调用map.get(key)来获得各自的值:

Object myValue = statusName.get(myKey);

你也可以试试下面的方法:

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

Java 8的方法,

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

记住,一般来说,插入顺序在映射中是不受尊重的。试试这个:

    /**
* 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.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();

此外,如果希望获得地图的第二个(第三个等)项,并且您已经验证该地图包含至少2个条目,您可以使用以下方法。

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

改进whoami的回答。因为findFirst()返回Optional,所以它是 一个很好的做法是检查是否有值。

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


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


var key = optional.get();

另外,一些人评论说找到HashSet的第一个键是不可靠的。但有时我们有HashMap对;也就是说,在每个map中,我们有一个键和一个值。在这种情况下,快速找到这样一对中的第一个键是很方便的。

这也是一个很好的方法:)

Map<Integer,JsonObject> requestOutput = getRequestOutput(client,post);
int statusCode = requestOutput.keySet().stream().findFirst().orElseThrow(() -> new RuntimeException("Empty"));

芬兰湾的科特林回答

获取第一个键,然后获取键的值。Kotlin有&;< >强第一()< / >强"功能:

val list = HashMap<String, String>() // Dummy HashMap.


val keyFirstElement = list.keys.first() // Get key.


val valueOfElement = list.getValue(keyFirstElement) // Get Value.