[英]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.Entry
是public interface
, LinkedHashMap.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
}
顯然,如果您知道Map
將String
映射到Object
(例如),則可以使用Map<String, Object>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.