簡體   English   中英

如何從LinkedHashMap迭代器獲取鍵,值對?

[英]How I can get key, value pair from LinkedHashMap iterator?

我測試SnakeYAML庫以讀取.yaml文檔。 我已閱讀示例2.27。 來自http://yaml.org/spec/1.1/的發票,我得到對象:

System.out.println(content);
Yaml yaml = new Yaml();
Object o = yaml.load(content);

其中內容是使用Files.readAllBytes,encoding.decode從文件加載的字符串(編碼為StandardCharsets.UTF_8)

反射使我知道o是java.util.LinkedHashMap的類型,我可以對其進行迭代:

Set entrySet = o.entrySet();
Iterator it = entrySet.iterator();
System.out.println("LinkedHashMap entries : ");
while (it.hasNext())
{
    Object entry = it.next();
    System.out.println(entry);
}

反射返回的條目類型為LinkedHashMap $ Entry。 但這是問題 :內部類LinkedHashMap $ Entry是私有的,我無法聲明此類型的對象。 如何從Entry,Iterator或entrSet獲取對?

您應該聲明一個Map.Entry而不是LinkedHashMap.Entry

while (it.hasNext())
{
    Map.Entry<?,?> entry = it.next();
    System.out.println(entry.getKey());
    System.out.println(entry.getValue());
}

Map.Entrypublic interfaceLinkedHashMap.Entry是該接口的私有實現。

注意,我還用<?,?>聲明了Entry ,這是一個通用聲明 如果您知道Map的類型,則可以聲明該類型,而無需強制轉換:

Set<Entry<?,?>> entrySet = o.entrySet();
Iterator<Entry<?,?>> it = entrySet.iterator();

此外,您可以使用增強的foreach循環進行迭代:

final Map<?,?> myMap = (Map<?,?>) yaml.load(content);
for(final Entry<?,?> entry : o.entrySet()) {
    //do stuff with entry
}

顯然,如果您知道MapString映射到Object (例如),則可以使用Map<String, Object>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM