Java 如何从LinkedHashMap迭代器获取键、值对?

Java 如何从LinkedHashMap迭代器获取键、值对?,java,iterator,linkedhashmap,Java,Iterator,Linkedhashmap,我测试SnakeYAML库以阅读.yaml文档。我已经阅读了示例2.27。发票来源和我获取对象: System.out.println(content); Yaml yaml = new Yaml(); Object o = yaml.load(content); 其中内容是使用Files.readAllBytes、encoding.decode从文件加载的字符串(编码为StandardCharsets.UTF_8) 反射让我意识到o是java.util.LinkedHashMap的类型,我可

我测试SnakeYAML库以阅读.yaml文档。我已经阅读了示例2.27。发票来源和我获取对象:

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、iterator或entrSet中获取配对?

您应该声明一个
Map.entry
,而不是
LinkedHashMap.entry

while (it.hasNext())
{
    Map.Entry<?,?> entry = it.next();
    System.out.println(entry.getKey());
    System.out.println(entry.getValue());
}
此外,您还可以使用增强的foreach循环进行迭代:

final Map<?,?> myMap = (Map<?,?>) yaml.load(content);
for(final Entry<?,?> entry : o.entrySet()) {
    //do stuff with entry
}
final Map myMap=(Map)yaml.load(content);
for(最终条目:o.entrySet()){
//用入口做东西
}

显然,如果您知道您的
映射
正在将
字符串
映射到
对象
(例如),您可以使用
映射
,您应该声明一个
映射项
,而不是
链接映射项

while (it.hasNext())
{
    Map.Entry<?,?> entry = it.next();
    System.out.println(entry.getKey());
    System.out.println(entry.getValue());
}
此外,您还可以使用增强的foreach循环进行迭代:

final Map<?,?> myMap = (Map<?,?>) yaml.load(content);
for(final Entry<?,?> entry : o.entrySet()) {
    //do stuff with entry
}
final Map myMap=(Map)yaml.load(content);
for(最终条目:o.entrySet()){
//用入口做东西
}

显然,如果您知道您的
映射
正在将
字符串
映射到
对象
(例如),您可以使用
映射
查看发布在以下位置的示例: 和

查看发布在以下位置的示例: 和

改用公共界面。改用公共界面。