2009-07-01 12 views
6

मुझे एक पायथन कोड को बराबर जावा कोड में बदलने की जरूरत है। पाइथन डेवलपर्स के लिए शॉर्टकट कार्यक्षमताओं को प्रदान करके जीवन को बहुत आसान बनाता है। लेकिन अब मुझे इसे जावा में माइग्रेट करने की आवश्यकता है। मैं सोच रहा था कि जावा में dict वस्तुओं के बराबर क्या होगा? मैंने हैश मैप का उपयोग करने की कोशिश की है लेकिन जीवन नरक है। शुरुआत के लिए इस पर विचार करें,एक पाइथन dict ऑब्जेक्ट को जावा समकक्ष ऑब्जेक्ट में कैसे परिवर्तित करें?

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

तो जावा में इसे बदलने के बारे में कैसे जाना है? शुरुआत मैं HashMap वस्तु इतनी इस्तेमाल किया के लिए,

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

मेरे समस्या सूची हिस्सा जिसमें नाम & शक्ति & तो शक्ति भाग को अद्यतन करने में हो रही है। क्या ऐसा करने का कोई व्यवहार्य तरीका है? क्या मुझे कुछ अलग डेटा संरचना पर विचार करना चाहिए? कृपया मदद करे।

उत्तर

4

यह शायद सबसे आसान बस (नाम, शक्ति) टपल के लिए एक वर्ग बनाने के लिए:

map.put(key,new_value); 

यहाँ एक छोटा सा उदाहरण कार्यक्रम है यदि उपयुक्त हो तो कन्स्ट्रक्टर।

तो फिर आप अपने नक्शे में नया वर्ग का उपयोग कर सकते हैं:

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

जावा 5 में और ऊपर, तो आप इस तरह पुनरावृति कर सकते हैं:

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

या इस तरह:

for (Entry<Integer, NameStrength> entry : nodesMap.entrySet()) {} 
टिप के लिए
+0

धन्यवाद। यह बहुत उपयोगी है। मैं बस अधिक सफल दृष्टिकोण प्राप्त करने की उम्मीद कर रहा था। – Chantz

+5

आह ठीक है, दुर्भाग्यवश, संक्षेप जावा की ताकत में से एक नहीं है ... – jqno

1

जावा में अंतर्निहित टुपल के बराबर नहीं है। आपको एक वर्ग बनाना होगा जो दोनों को नकल करने के लिए दोनों को एक साथ जोड़ देगा।

2

अच्छी तरह से jython है। यहाँ कि अजगर/जावा की ओर देखने से एक अच्छा पक्ष प्रदान करता है this article से एक छोटा सा है

जावा के संग्रह वर्गों के लिए Jython analogues और अधिक कसकर कोर भाषा में एकीकृत, अधिक संक्षिप्त के लिए अनुमति नहीं है विवरण और उपयोगी कार्यक्षमता।

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] 


संपादित करें:() मूल्यों को बदलने के लिए क्या सिर्फ पुट उपयोग करने के साथ गलत क्या है उदाहरण के लिए, जावा कोड के बीच अंतर नोटिस ?

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

ही टिककर खेल, setters और एक जोड़ें:

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

धन्यवाद। लेकिन मैं कुछ प्रतिबंधों के कारण ज्योथन का उपयोग नहीं कर सकता। – Chantz

संबंधित मुद्दे

 संबंधित मुद्दे