我需要将python代码转换为等效的java代码。 Python通过提供许多快捷功能,使开发人员的生活变得非常轻松。但是现在我需要将它迁移到Java。我想知道java中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()){ }
我的问题在于获取包含Name&amp;的List部分。力量&amp;然后更新强度部分。有没有可行的方法呢?我应该考虑一些不同的数据结构吗?请帮忙。
答案 0 :(得分:4)
为(Name,Strength)元组创建一个类可能最简单:
class NameStrength {
public String name;
public String strength;
}
如果合适,添加getter,setter和构造函数。
然后您可以在地图中使用新课程:
Map<Integer, NameStrength> nodesMap = new HashMap<Integer, NameStrength>();
在Java 5及更高版本中,您可以像这样迭代:
for (NameStrength nameStrength : nodesMap.values()) {}
或者像这样:
for (Entry<Integer, NameStrength> entry : nodesMap.entrySet()) {}
答案 1 :(得分:3)
总是jython。 这里有一点来自this article,它提供了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);
}
}
答案 2 :(得分:1)
Java没有相当于内置的元组。您必须创建一个将两者封装在一起以模仿它的类。