जावा: मैप में सभी अलग-अलग कुंजी और मानों की गिनती प्राप्त करें

Jan 26 2021

इनपुट: नक्शा <स्ट्रिंग, सेट> नक्शा

जैसे: नक्शा =

    {"a"=[], 
    "b"=["b", "1", "2", "4"]}

अपेक्षित आउटपुट: 5 ("बी" कुंजी और मूल्य के रूप में प्रकट होता है। इसे एक के रूप में गिना जाना चाहिए)

यह वही है जो मैंने अब तक कोशिश की है। क्या ऐसा करने के लिए इससे अच्छा तरीका है?

    Set<String> o = new HashSet<String>();
    o.addAll(m1.keySet());
    o.addAll(m1.values().stream().flatMap(Collection::stream).collect(Collectors.toSet()));
    System.out.println(o.size());

क्या इस आउटपुट पर आने के लिए मैप के एंट्रीसेट पर स्ट्रीम करना संभव है? एक अलग हैशसेट बनाने के लिए सिर्फ एक गिनती प्राप्त करना अनावश्यक लगता है

जवाब

1 Eran Jan 26 2021 at 15:20

आप ऐसा कुछ कर सकते हैं:

Set<String> o = m1.entrySet()
                  .stream()
                  .flatMap(e -> Stream.concat(Stream.of(e.getKey()),e.getValue().stream()))
                  .collect(Collectors.toSet());

यानी Stream<String>की प्रत्येक प्रविष्टि बनाएँ Map