2014-06-19 13 views
6

मैं एक HashMap कि एक कुंजी के रूप में एक पूर्णांक और एक मूल्य के रूप में स्ट्रिंग की एक सूची में शामिल होंगे बनाने के लिए कोशिश कर रहा हूँ:जावा 8 नक्शा मर्ज विधि

Map<Integer, List<String>> map = new HashMap<Integer, List<String>>(30); 

मैं किसी भी तरह यह कुशलतापूर्वक को भरने के लिए चाहते हैं। क्या मैं आया था:

map.merge(search_key, new ArrayList<>(Arrays.asList(new_string)), (v1, v2) -> { 
        v1.addAll(v2); 
        return v1; 
       }); 

इस कोड को छोटा है और सुरुचिपूर्ण लेकिन मेरी समस्या यह है कि मैं एक नया सूची हर कॉल में पैदा करते हैं। क्या कोई तरीका है कि मैं पहली विलय के बाद सूची निर्माण को छोड़ सकता हूं, और केवल पहली बनाई गई सूची में new_string जोड़ सकता हूं?

+1

लेकिन टूटी हुई "यह कोड छोटे और सुंदर है।" 'Arrays.asList' के परिणाम पर 'addAll' का आह्वान करने का प्रयास नहीं करेगा ... – Holger

+0

@ होल्गर आप सही हैं। मेरी गलती यह है कि Arrays.asList (new_string) एक निश्चित सूची देता है, मैं इसे ठीक कर दूंगा। –

उत्तर

16

आप lazily एक सूची बनाने के लिए विधि Map::computeIfAbsent उपयोग करना चाहिए:

map.computeIfAbsent(search_key, k -> new ArrayList<>()) 
    .add(new_string); 
संबंधित मुद्दे