以下是HashMap中包含的值
statusName {Active=33, Renewals Completed=3, Application=15}
获取第一个键(即Active)的Java代码
Object myKey = statusName.keySet().toArray()[0];
我们如何收集第一个键“Value”(即33),我想将“Key”和“Value”分别存储在不同的变量中。
你可以尝试这样做:
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
更新: 在 Java 8
或更高版本中获取第一个键。
Optional<String> firstKey = map.keySet().stream().findFirst();
if (firstKey.isPresent()) {
String key = firstKey.get();
}
Gson
将值对象转换为 String
,然后将其解析回我的类类型来解决了这个问题。虽然有些丑陋,但我真的找不到其他解决方案,而在其他语言中这样做是如此容易(我正在学习 Java)。 - Blue Botmap.keySet().toArray()[0]
不是线程安全的吗? - Simon Baarsmap.entrySet().iterator().next()
是 o(1) 运行时间还是 o(n) 运行时间。感谢任何人能够回答... - Fiddle Freak获取“第一个”值:
map.values().toArray()[0]
要获取"first"键的值:
map.get(map.keySet().toArray()[0])
注意:上述代码已经经过测试并且可用。Java 8的做法是:
String firstKey = map.keySet().stream().findFirst().get();
为了获取完整的第一条目录,您也可以尝试以下方法:
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();
keys.values().iterator().next();
比 keys.values().stream().findFirst().get();
要快得多。如果你知道该函数将经常被调用,并且大多数情况下map只会保存一个值,这可能是一种性能优化。 - BarbetNLKotlin答案
获取第一个键然后获取键的值。Kotlin中有"first()"函数:
val list = HashMap<String, String>() // Dummy HashMap.
val keyFirstElement = list.keys.first() // Get key.
val valueOfElement = list.getValue(keyFirstElement) // Get Value.
youMap.get(keyYouHave)
,您可以获取它的值。LinkedHashMap
。HashMap
元素,简单来说,因为 HashMap
不是有序 Collection
,也不是它们的目标。 (您可以在此文章中了解有序和排序集合的更多信息。)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
时使用此操作。
findFirst()
返回一个Optional
,因此最好检查是否有值。 var optional = pair.keySet().stream().findFirst();
if (!optional.isPresent()) {
return;
}
var key = optional.get();
此外,一些人评论说查找 HashSet
的第一个键是不可靠的。但有时我们有 HashMap
对;即在每个映射中,我们有一个键和一个值。在这种情况下,快速查找此类对的第一个键是方便的。
这也是一种不错的方法 :)
Map<Integer,JsonObject> requestOutput = getRequestOutput(client,post);
int statusCode = requestOutput.keySet().stream().findFirst().orElseThrow(() -> new RuntimeException("Empty"));
HashMap
的条目是无序的,所以“第一个”在修改地图时会发生变化吗? - NPEHashMap
中没有特定的顺序吗?如果你对它进行任何修改,你可能会得到完全不同的结果。 - Jon Skeet