2015-03-24 7 views
9

मैं एक HashMap का उपयोग कर java8 stream एपीआई बना रहा हूं इस प्रकार है:डुप्लिकेट ओवरराइड करने वाली धाराओं के साथ हैश मैप कैसे बनाएं?

Map<Integer, String> map = dao.findAll().stream() 
    .collect(Collectors.toMap(Entity::getType, Entity::getValue)); 
अब अगर एक तत्व संग्रह जहां कुंजी पहले से मौजूद, मैं सिर्फ सूची में मौजूदा तत्व रखने के लिए और छोड़ना चाहते में जोड़ा जाता है

अतिरिक्त तत्व। इसे कैसे प्राप्त किया जा सकता है? शायद मुझे का toMap() का उपयोग करना है, लेकिन कोई भी

मेरे विशिष्ट मामले का एक उदाहरण प्रदान कर सकता है?

+1

क्या आपने प्रलेखन पर एक नज़र डाली? क्योंकि वे एक उदाहरण प्रदान करते हैं: https://docs.oracle.com/javase/8/docs/api/java/util/stream/Collectors.html#toMap-java.util.function.Function-java.util.function। समारोह-java.util.function.BinaryOperator- –

उत्तर

9

हां, आपको BinaryOperation<U> की आवश्यकता है और इसे Collectors.toMap() के लिए तीसरे तर्क के रूप में उपयोग करें।

किसी विवाद (पहले से मौजूद कुंजी की उपस्थिति) के मामले में आपको मूल्य oldValue (मौजूदा एक) और newValue के बीच चयन करना होगा। कोड उदाहरण में हम हमेशा oldValue मान लेते हैं। लेकिन आप इन दो मूल्यों के साथ कुछ और करने के लिए स्वतंत्र हैं (बड़ा ले लो, दो इत्यादि मर्ज करें)।

Map<Integer, String> map = dao.findAll().stream() 
    .collect(Collectors.toMap(Entity::getType, Entity::getValue, (oldValue, newValue) -> oldValue)); 

एक और उदाहरण के लिए documentation देखें:

निम्न उदाहरण एक संभव समाधान जहां मौजूदा मूल्य हमेशा मानचित्र में रहता है पता चलता है।

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