gpt4 book ai didi

java - 如何使静态递归方法返回 HashMap?

转载 作者:行者123 更新时间:2023-11-29 05:58:23 24 4
gpt4 key购买 nike

我正在创建一个辅助方法,该方法允许我遍历 XML 文档并将每个元素放入数据 HashMap 中,然后返回它。这是我一直在研究的方法:

private static HashMap<String, String> traverseNodes( Node n, HashMap<String,String> data ) 
{
NodeList children = n.getChildNodes();
if( children != null ) {
for( int i = 0; i < children.getLength(); i++ ) {
Node childNode = children.item( i );

String nodeName = childNode.getNodeName();
if(childNode instanceof Element)
{
data.put(nodeName, getStringByTag(nodeName, (Element)childNode));
Log.d("traversal", childNode.getNodeName() + " was saved in hashmap");
}


else
Log.d("traversal", childNode.getNodeName() + " Is not an Element type");

System.out.println( "node name = " + childNode.getNodeName() );
traverseNodes( childNode, data );
}
}

return data;

}

我尝试运行该示例,虽然我收到消息说“childNode.getNodeName() +”已保存在 hashmap 中。但返回的 HashMap 是空的。

我做错了什么?

编辑!奖励问题:我编辑了代码以反射(reflect)建议的更改。然而,该方法本身似乎并没有保存我的 XML 文档的值。方法中的逻辑有没有问题?

最佳答案

您在每次调用时都在创建新 map 。您需要将现有 map 传递给递归调用。它应该看起来像这样:

private static Map<String, String> traverseNodes(Node n) {
Map<String, String> map = new HashMap<String, String>();
traverseNodesRecurse(n, map);
return map;
}

private static void traverseNodesRecurse(Node n, Map<String, String> map) {
// Logic as per question
// Recursive call (in the loop, etc)
traverseNodes(childNode, map);

// No need for a return statement
}

关于java - 如何使静态递归方法返回 HashMap?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11132746/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com