2015-12-01 8 views
8

मैप कर सकते हैं मैं एक नक्शा है:Java8 कार्यात्मक शैली में, मैं कैसे मान पहले से ही विद्यमान की कुंजी मान युग्म

: मैं नीचे की तरह मानचित्र पर नई कुंजी मान जोड़े जोड़ना चाहते हैं

Map<String, List<Object>> dataMap; 

अब

if(dataMap.contains(key)) { 
    List<Object> list = dataMap.get(key); 
    list.add(someNewObject); 
    dataMap.put(key, list); 
} else { 
    List<Object> list = new ArrayList(); 
    list.add(someNewObject) 
    dataMap.put(key, list); 
} 

मैं जावा 8 कार्यात्मक शैली के साथ यह कैसे कर सकता हूं?

उत्तर

10

की जरूरत नहीं आप computeIfAbsent का उपयोग कर सकते है।

यदि मैपिंग मौजूद नहीं है, तो बस एक नई खाली सूची के साथ कुंजी को जोड़कर एक बनाएं, और उसके बाद मान जोड़ें।

dataMap.computeIfAbsent(key, k -> new ArrayList<>()).add(someNewObject); 

प्रलेखन राज्यों के रूप में, यह तो आप ArrayList#add साथ कॉल श्रृंखला कर सकते हैं निर्दिष्ट कुंजी के साथ जुड़े वर्तमान (मौजूदा या गणना) मान देता है। बेशक यह मानता है कि मूल मानचित्र में मान निश्चित आकार की सूचियां नहीं हैं (मुझे नहीं पता कि आपने इसे कैसे भर दिया है) ...

वैसे, यदि आपके पास मूल डेटा स्रोत तक पहुंच है, तो मैं इससे धारा पकड़ लेंगे और सीधे Collectors.groupingBy का उपयोग करें।

0

इसे टर्नरी ऑपरेटर का उपयोग करके सरल बनाया जा सकता है। आप वास्तव में अगर-बाकी बयान

List<Object> list = dataMap.containsKey(key) ? dataMap.get(key) : new ArrayList<>(); 
list.add(someNewObject); 
dataMap.put(key, list); 
संबंधित मुद्दे