2009-07-01 17 views
6

Ho bisogno di convertire un codice Python in un codice java equivalente. Python rende la vita molto facile per gli sviluppatori fornendo molte funzionalità di collegamento. Ma ora ho bisogno di migrare lo stesso in Java. Mi stavo chiedendo quale sarà l'equivalente degli oggetti di ditt in java? Ho provato ad usare HashMap ma la vita è un inferno. Per i principianti consideriamo questo,come convertire un oggetto dict python in un oggetto equivalente java?

# Nodes is a dictionary -> Key : (Name, Strength) 
for node, (name, strength) in nodes.items(): 
    nodes[node] = (name, new_strength) 

Quindi, come fare per convertire questo in Java? Per cominciare ho usato HashMap oggetto così,

Map<Integer, List> nodesMap = new HashMap<Integer,List>(); 
/* For iterating over the map */ 
Iterator updateNodeStrengthIterator = nodesMap.entrySet().iterator(); 
while(updateNodeStrengthIterator.hasNext()){ }  

Il mio problema è a ottenere la parte elenco che contiene Nome & Forza & quindi aggiornare la parte Forza. C'è un modo fattibile per fare questo? Dovrei prendere in considerazione una struttura di dati diversa? Per favore aiuto.

risposta

4

E 'probabilmente più semplice per creare solo una classe per la (nome, Forza) tuple:

class NameStrength { 
    public String name; 
    public String strength; 
} 

Aggiungi getter, setter e un costruttore se appropriato.

quindi è possibile utilizzare la nuova classe nella mappa:

Map<Integer, NameStrength> nodesMap = new HashMap<Integer, NameStrength>(); 

In Java 5 e fino, è possibile iterare in questo modo:

for (NameStrength nameStrength : nodesMap.values()) {} 

o come questo:

for (Entry<Integer, NameStrength> entry : nodesMap.entrySet()) {} 
+0

grazie. questo è molto utile. Speravo solo di ottenere più approccio di successo. – Chantz

+5

Ah beh, sfortunatamente, la concisione non è uno dei punti di forza di Java ... – jqno

1

Java non ha l'equivalente di una tupla integrata. Dovresti creare una classe che incapsula i due insieme per simularla.

2

bene c'è sempre jython. qui è un po 'da this article che offre un buon fianco a vista laterale del pitone/java

Gli analoghi Jython alle classi di raccolta di Java sono molto più strettamente integrati nel linguaggio di base , consentendo un più conciso descrizioni e funzionalità utili. Per esempio, notare la differenza tra il codice 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)); 

e il codice Jython:

map = {"one":1,"two":2,"three":3} 
print map ["one"] 
list = [1, 2, 3] 


edit: che cosa c'è di sbagliato con solo usando put() per sostituire i valori ?

map.put(key,new_value); 

Ecco un piccolo programma di esempio:

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); 
    } 
} 
+0

grazie per il suggerimento. ma non posso usare Jython a causa di alcune restrizioni. – Chantz

Problemi correlati