2017-07-20 5 views
10

मैं निम्नलिखित वर्ग है:जावा 8 में मान के रूप में सेट के साथ सेट में मानचित्र को कैसे परिवर्तित करें?

class A { 
    private String id; 
    private String name; 
    private String systemid; 
} 

मैं एक का एक सेट हो रही है और यह एक नक्शा जहां कुंजी प्रणाली आईडी है कन्वर्ट करने के लिए चाहते हैं, और मूल्य ए के सेट है (Map<String, Set<A>) एक ही सिस्टमिड के साथ कई ए उदाहरण हो सकते हैं।

.. इसे कैसे करना पता लगाने नहीं कर पा रहे यहाँ तक मिल गया लेकिन पहचान स्पष्ट रूप से सही नहीं है

Map<String, Set<A>> sysUidToAMap = mySet.stream().collect(Collectors.toMap(A::getSystemID, Function.identity())); 

आपकी सहायता के लिए कृपया कर सकते हैं?

+1

यहां देखें, यह आपकी मदद कर सकता है https://stackoverflow.com/questions/16108734/convert-setmap-entryk-v-to-hashmapk-v –

उत्तर

7

आप groupingBy बजाय toMap उपयोग कर सकते हैं:

Map<String, Set<A>> sysUidToAMap = 
    mySet.stream() 
     .collect(Collectors.groupingBy(A::getSystemID, 
             Collectors.toSet())); 
+0

आपका बहुत बहुत धन्यवाद! – user1386966

+1

@ थिलो यह सच है। मैंने केवल एक सेट में मानचित्रण शामिल किया क्योंकि यह प्रश्न में वांछित आउटपुट था। – Eran

2

मेरी 2 ¢: आप Collectors.toMap साथ यह करना है, लेकिन यह थोड़ा और अधिक वर्बोज़ है कर सकते हैं:

 yourSet 
     .stream() 
      .collect(Collectors.toMap(
        A::getSystemId, 
        a -> { 
         Set<A> set = new HashSet<>(); 
         set.add(a); 
         return set; 
        }, (left, right) -> { 
         left.addAll(right); 
         return left; 
        })); 
+0

पहला, अप-वोट। '0.02 $' का अर्थ क्या है? मैंने देखा है कि आप इसे कई बार कहते हैं। –

+2

@ होली-जावा https://en.wikipedia.org/wiki/My_two_cents इसका मतलब यह है कि यह पहले से ही कहा गया है कि यह बहुत छोटा जोड़ा है – Eugene

+1

और किसी भी कारण से, लोग '0.02 $' लिखना पसंद करते हैं '2 ¢ 'और कभी-कभी, वे पिछले" मेरे "को भी छोड़ देते हैं ... – Holger

2

धाराओं विशेष रूप से अनुरोध नहीं किया गया के रूप में , यहां केवल Map एपीआई के साथ ऐसा करने का एक तरीका है:

Map<String, Set<A>> map = new HashMap<>(); 
mySet.forEach(a -> map.computeIfAbsent(a.getSystemId(), k -> new HashSet<>()).add(a)); 
संबंधित मुद्दे