2016-03-08 6 views
8

मानचित्र के बाद, दोनों कुंजी-मूल्य जोड़ी स्ट्रिंग के रूप में रखते हुए, किसी भी बाहरी एपीआई के बिना मानचित्र से सभी शून्य मानों को फ़िल्टर करने के लिए एक तर्क लिखें?हैश मैप <स्ट्रिंग, स्ट्रिंग> से "शून्य" मान कैसे फ़िल्टर करें?

क्या पूरे मानचित्र के माध्यम से ट्रैवर्सिंग और मूल्यों को फ़िल्टर करने से कोई अन्य दृष्टिकोण है (पूरे मानचित्र को ट्रैक करना और प्रविष्टि ऑब्जेक्ट प्राप्त करना और उन जोड़ी को छोड़ना)?

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

     map.put("1", "One"); 
     map.put("2", "Two"); 
     map.put("3", null); 
     map.put("4", "Four"); 
     map.put("5", null); 
     //Logic to filer values 
     //Post filtering It should print only (1,2 & 4 pair) 
+3

नहीं, isn ' टी। ट्रैवर्सल (यह सिर्फ एक लूप है) या तो आपके कोड में होगा या जेडीके कोड (धाराएं, आदि) में होगा, लेकिन लूप होने की आवश्यकता होगी। –

+4

यदि आप पहली जगह 'null' को अनुमति नहीं देना चाहते हैं, तो आप इसे उपclass कर सकते हैं और' put' विधि ओवरराइड कर सकते हैं। – Maroun

उत्तर

49

आप इस उद्देश्य के लिए जावा 8 विधि Collection.removeIf उपयोग कर सकते हैं:

map.values().removeIf(Objects::isNull); 

यह सभी मूल्यों है कि रिक्त हैं हटा दिया।

Online demo

4

कि

Map<String, String> result = map.entrySet() 
    .stream() 
    .filter(e -> e.getValue() != null) 
    .collect(Collectors.toMap(p -> p.getKey(), p -> p.getValue())); 
+0

ओह, क्षमा करें। यह केवल धाराओं के लिए काम करता है। हम धाराओं में और से कनवर्ट कर सकते हैं, मुझे अपना जवाब अपडेट करने दें। – jberndsen

14

आप पूर्व जावा 8 का उपयोग कर रहे हैं, तो काम करेंगे, तो आप उपयोग कर सकते हैं:

Collection<String> values = map.values(); 
while (values.remove(null)) {} 

यह काम करता है क्योंकि HashMap.values() के एक दृश्य देता है मान, और:

संग्रह [HashMap.values() द्वारा लौटाए] तत्व हटाने, जो नक्शे से इसी मानचित्रण निकाल देता है, Iterator.remove, Set.remove, removeAll, retainAll, के माध्यम से और स्पष्ट संचालन का समर्थन करता है

+2

हां! लेकिन मुझे लगता है कि आप इसे 'value.removeAll (Arrays.asList (null)) का उपयोग करके * छोटे * बना सकते हैं। समाधान के लिए –

+0

धन्यवाद एंडी। मैंने आपके समाधान के साथ प्रयास किया। यह ठीक काम कर रहा है। – RaBa

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