如何将Python字典对象转换为Java等效对象?
我需要把一段Python代码转换成等效的Java代码。Python让开发者的生活变得很简单,因为它提供了很多快捷的功能。但是现在我需要把这些代码迁移到Java。我在想,Java中有什么东西可以和Python的字典(dict)对象相对应呢?我试过使用HashMap,但感觉真是太麻烦了。首先考虑这个,
# Nodes is a dictionary -> Key : (Name, Strength)
for node, (name, strength) in nodes.items():
nodes[node] = (name, new_strength)
那么我该如何把这个转换成Java呢?一开始我使用了HashMap对象,所以,
Map<Integer, List> nodesMap = new HashMap<Integer,List>();
/* For iterating over the map */
Iterator updateNodeStrengthIterator = nodesMap.entrySet().iterator();
while(updateNodeStrengthIterator.hasNext()){ }
我遇到的问题是如何处理包含名称和强度的列表部分,然后更新强度的部分。有没有什么可行的方法来做到这一点?我应该考虑使用其他的数据结构吗?请帮帮我。
3 个回答
1
Java没有内置的元组(tuple)这种数据结构。你需要自己创建一个类,把这两个东西放在一起,才能模拟出元组的效果。
3
其实你可以试试 jython。下面是来自 这篇文章 的一些内容,它很好地对比了 Python 和 Java。
Jython 中的集合类和 Java 的集合类相比,更加紧密地融入了语言的核心部分,这样可以让代码写得更简洁,功能也更强大。比如,看看下面的 Java 代码:
map = new HashMap(); map.put("one",new Integer(1)); map.put("two",new Integer(2)); map.put("three",new Integer(3)); System.out.println(map.get("one")); list = new LinkedList(); list.add(new Integer(1)); list.add(new Integer(2)); list.add(new Integer(3));
再看看 Jython 的代码:
map = {"one":1,"two":2,"three":3} print map ["one"] list = [1, 2, 3]
编辑:用 put() 来替换值有什么问题呢?
map.put(key,new_value);
这里有一个简单的示例程序:
static public void main(String[] args){
HashMap<String,Integer> map = new HashMap<String,Integer>();
//name, age
map.put("billy", 21);
map.put("bobby", 19);
year(map);
for(String i: map.keySet()){
System.out.println(i+ " " + map.get(i).toString());
}
}
// a year has passed
static void year(HashMap<String,Integer> m){
for(String k: m.keySet()){
m.put(k, m.get(k)+1);
}
}
4
最简单的方法可能就是为(Name, Strength)这个组合创建一个类:
class NameStrength {
public String name;
public String strength;
}
如果需要的话,可以添加获取器、设置器和构造函数。
然后你就可以在你的映射中使用这个新类:
Map<Integer, NameStrength> nodesMap = new HashMap<Integer, NameStrength>();
在Java 5及以上版本中,你可以这样遍历:
for (NameStrength nameStrength : nodesMap.values()) {}
或者这样遍历:
for (Entry<Integer, NameStrength> entry : nodesMap.entrySet()) {}