7

我需要将 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()){ }    

我的问题是获取包含名称和强度的列表部分,然后更新强度部分。有没有可行的方法来做到这一点?我应该考虑一些不同的数据结构吗?请帮忙。

4

3 回答 3

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()) {}
于 2009-07-01T23:31:47.863 回答
3

好吧,总是有jython这是这篇文章的一点点,它提供了 python/java 的一个很好的并排视图

与 Java 集合类类似的 Jython 更紧密地集成到核心语言中,允许更简洁的描述和有用的功能。例如,请注意 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);
    }
}
于 2009-07-01T23:28:48.710 回答
1

Java 没有内置的元组等价物。您必须创建一个将两者封装在一起的类来模仿它。

于 2009-07-01T23:28:26.870 回答