2017-06-29 12 views
5

दो नक्शेएक में विभिन्न प्रकार के नक्शे मर्ज जावा में 8

  • <Integer,String> map1 जो <ID,Question>
  • <Integer,String> map2 जो <ID,Answer>

मैं उन्हें एक ही नक्शा <String,String> resultMap में मर्ज करना चाहते है कर रहे हैं जो से MAP2 (उत्तर) <Question,Answer> ऐसी है कि इस नक्शे में कुंजी map1 (प्रश्न) और resultMap में मूल्य से मूल्य है मूल्य और यह एक ही आईडी के आधार पर किया जाता है।

मैं के रूप में नीचे दिए गए कोड में देखा जावा 6 में आसानी से कर सकते हैं।

for(Map.Entry<Integer,String> entry:map1.entrySet()){ 
    qaMap.put(entry.getValue(),map2.get(entry.getKey())); 
} 

लेकिन मैं इसे स्ट्रीम 8 और स्ट्रीम्स का उपयोग कर जावा 8 में लिखना चाहता हूं। उसको कैसे करे?

उत्तर

6

अपनी चाबी ठीक है यह सोचते हैं (आईडीएस) एक ही दोनों नक्शे में हम जैसे

Map<String,String> map = map1.keySet().stream().collect(Collectors.toMap(map1::get, map2::get)); 

कुछ कर सकते हैं इसके बाद के संस्करण बयान में कर रहे हैं, map1.keySet().stream() आप आईडी की एक धारा मिल जाएगा। तब collect(Collectors.toMap(map1::get, map2::get) प्रत्येक आईडी के लिए के रूप में map2.get (ID) map1.get (आईडी) के रूप में कुंजी (अर्थात अपने प्रश्न) और मूल्य (अर्थात आपका जवाब) के साथ आईडी की धारा से एक मानचित्र का निर्माण करेगा।

3

@Dark समाधान सुरुचिपूर्ण है लेकिन कोई वैकल्पिक समाधान जिसे समझने की आरंभिक चाहिए देना चाहिए। इसलिए मैं foreach और lambda साथ जा सकते हैं। आप प्रत्येक map1 के माध्यम से पुनरावृति और qaMap को जोड़ सकते हैं।

Map<Integer,String> map1 = new HashMap<>(); 
Map<Integer,String> map2 = new HashMap<>(); 
Map<String,String> qaMap = new HashMap<>(); 
map1.put(1,"what is your age"); 
map2.put(1,"25"); 

map1.forEach((k,v)->qaMap.put(v,map2.get(k))); 
System.out.println(qaMap.size()); 
संबंधित मुद्दे