Java HashMap-获取第一个键值

Java HashMap-获取第一个键值,java,hashmap,Java,Hashmap,下面是HashMap中包含的值 statusName {Active=33, Renewals Completed=3, Application=15} 获取第一个密钥的Java代码(即活动) 如何收集第一个键“值”(即33),我想将“键”和“值”存储在单独的变量中。您可以尝试以下方法: Map<String,String> map = new HashMap<>(); Map.Entry<String,String> entry = map.entry

下面是HashMap中包含的值

statusName {Active=33, Renewals Completed=3, Application=15}
获取第一个密钥的Java代码(即活动)

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

您可以尝试以下方法:

 Map<String,String> map = new HashMap<>();
 Map.Entry<String,String> entry = map.entrySet().iterator().next();
 String key = entry.getKey();
 String value = entry.getValue();
输出:

 Active
 33
更新: 在
Java8
或更高版本中获取第一个密钥

Optional<String> firstKey = map.keySet().stream().findFirst();
if (firstKey.isPresent()) {
    String key = firstKey.get();
}
Optional firstKey=map.keySet().stream().findFirst();
if(firstKey.isPresent()){
String key=firstKey.get();
}
我们如何收集第一个键“值”(即33)

通过使用
youMap.get(keyYouHave)
,您可以获得它的值

要将“键”和“值”存储在单独的变量中吗

是的,您可以将其分配给变量

等等……还没结束

如果您(业务逻辑)依赖于插入和检索的顺序,那么您将看到奇怪的结果。地图未按顺序存储,它们不会按顺序存储。请注意这个事实。使用其他方法来维持秩序。可能需要一个

来获取“第一个”值:

要获取“第一个”键的值,请执行以下操作:

注:以上代码已测试并正常工作

我之所以说“first”,是因为HashMap条目没有顺序


但是,LinkedHashMap以插入的相同顺序迭代其条目-如果插入顺序很重要,您可以将其用于映射实现。

请注意,您应该注意,您的逻辑流决不能依赖于以某种顺序访问
HashMap
元素,简单地说,因为
HashMap
s不是有序的
Collection
s,这不是它们的目标。(您可以在中阅读有关订购和分拣机集合的更多信息)

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

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);
Map.Entry=myMap.firstEntry();
System.out.println(“第一个值=”+输入);
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;
    }
/**
*获取映射的第一个元素。映射不能保证插入顺序
*@param-map
*@param
*@param
*@返回
*/
公共静态K getFirstKeyValue(映射){
K值=null;
if(map!=null&&map.size()>0){
Map.Entry=Map.entrySet().iterator().next();
if(条目!=null)
value=entry.getValue();
}
返回值;
}

仅当我确信
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().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();
Map.Entry=Map.entrySet().stream().skip(1.findFirst().get();
String key=map.keySet().stream().skip(1.findFirst().get();
字符串值=map.values().stream().skip(1.findFirst().get();

改进whoami的答案。由于
findFirst()
返回一个
可选的
,因此 检查是否存在值的良好实践

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

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

 var key = optional.get();

此外,一些人评论说,查找
哈希集的第一个键是不可靠的。但有时我们有
HashMap
对;i、 在每个地图中,我们有一个键和一个值。在这种情况下,快速找到这样一对密钥的第一个密钥是很方便的。

也是一种很好的方法:)

Map requestOutput=getRequestOutput(客户端,post);
int statusCode=requestOutput.keySet().stream().findFirst().orelsetrow(()->新运行时异常(“空”);

Kotlin回答

获取第一个键,然后获取键的值。Kotlin具有“first()”功能:

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

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

val valueOfElement = list.getValue(keyFirstElement) // Get Value.
val list=HashMap()//虚拟HashMap。
val keyFirstElement=list.keys.first()//获取密钥。
val valueOfElement=list.getValue(keyFirstElement)//获取值。

您确实意识到
HashMap
条目是无序的,因此每当您修改映射时,“first”可能会更改?您是否了解
HashMap
中没有特定的顺序?如果您修改它,您可能会以完全不同的顺序得到结果。不,顺序不保证每次运行,但在同一个线程中,顺序是可以依赖的。@JonSkeet实际上这是一个非常有效的问题。在Groovy中,有很多情况下,您会返回一个类似于映射列表的结构,每个映射只有一个条目。到目前为止,我还没有找到一种简单/明显(Groovy)的方法来打印所有的值。如果键是常量,它就像集合一样简单。每个{println it.key}打印出每个值,但是没有常量键,它并不明显,而是集合。每个{println it.values()[0]}都有效(这里的一些答案的精化…。@BillK:如果你知道每个映射只有一个条目,那么这真的是一个不同的问题,我知道这是一个非常古老的答案。。这适用于键和值为字符串的哈希映射。但是当尝试对对象执行相同的值转换时出现错误:
com.google.gson.internal.LinkedTreeMap无法转换为…
。。。我的类,我说,而不是
字符串
在正确的地方。。。在网上找不到答案。。help@darthydarth您应该根据您的上下文使用适当的类型。首先非常感谢您的回答!没想到。。。其次,我发现运行时没有保存泛型存在问题。最后,我通过使用
Gson
将value对象转换为
字符串
,然后将其解析回我的类类型来绕过它。它很难看,但我真的找不到其他的
Map<Integer,JsonObject> requestOutput = getRequestOutput(client,post);
int statusCode = requestOutput.keySet().stream().findFirst().orElseThrow(() -> new RuntimeException("Empty"));
val list = HashMap<String, String>() // Dummy HashMap.

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

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