2014-05-22 7 views
27

पर एक हैश मैप के तत्व को कैसे हटाएं मेरे पास निम्न स्थिति है जहां मुझे स्ट्रीम से तत्व निकालने की आवश्यकता है।स्ट्रीमिंग (लैम्ब्डा)

map.entrySet().stream().filter(t -> t.getValue().equals("0")). 
      forEach(t -> map.remove(t.getKey())); 

पूर्व जावा 8 कोड में पुनरावर्तक से हटा - क्या इस स्थिति यहाँ से निपटने के लिए सबसे अच्छा तरीका क्या है?

उत्तर

65
map.entrySet().removeIf(entry -> entry.getValue().equals("0")); 
उपयोग करने के लिए है

आप इसे स्ट्रीम के साथ नहीं कर सकते हैं, लेकिन आप इसे अन्य नए तरीकों से कर सकते हैं।

संपादित करें: और भी बेहतर:

map.values().removeAll(Collections.singleton("0")); 
+0

बिल्कुल सही - मुझे बार-बार दोहराना की घना पुराना तरीका के बजाय कि एक लाइन का उपयोग करने की अनुमति देता है। – Dan

+0

क्या यह एंट्रीसेट से नहीं हटाएगा, न कि नक्शा स्वयं, या यह स्वतः सिंक्रनाइज़ करता है? –

+9

एंट्रीसेट एक दृश्य है; इसमें परिवर्तन नक्शे में प्रतिबिंबित होते हैं और इसके विपरीत; इसका कोई स्वतंत्र अस्तित्व नहीं है। –

2

मुझे लगता है कि यह संभव नहीं है (या deffinitelly नहीं किया जाना चाहिए) स्ट्रीम 'गैर-iterference की इच्छा की वजह से, के रूप में वर्णित here

आप के रूप में अपने कार्यात्मक प्रोग्रामिंग निर्माणों जावा में लीक धाराओं के बारे में सोचते हैं, तो वस्तुओं है कि उन्हें अपने कार्यात्मक समकक्षों के रूप में समर्थन और कार्यात्मक प्रोग्रामिंग में आप अपरिवर्तनीय वस्तुओं

पर कार्य करते हैं के बारे में सोचना और इस से निपटने के लिए सबसे अच्छा तरीका है के लिए फिल्टर जैसे तुमने किया था

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