2016-08-15 8 views
5

मेरे पास कुछ संग्रह List<Map<String, Object>> है जिसे जावा 8 लैम्ब्डा एक्सप्रेशन के साथ वैकल्पिक रूप से फ़िल्टर करने की आवश्यकता है। मुझे जेएसओएन ऑब्जेक्ट को झंडे के साथ प्राप्त होगा जो फ़िल्टरिंग मानदंडों को लागू करना होगा। यदि JSON ऑब्जेक्ट प्राप्त नहीं हुआ है, तो फ़िल्टरिंग की आवश्यकता नहीं है।जावा 8 स्थिति के साथ फ़िल्टरिंग और कस्टम मानचित्र

protected List<Map<String, Object>> populate(List<SomeObject> someObjects, String string) { 
    taskList.stream() 
      // How to put condition here? Ho to skip filter if no filter oprions are received? 
      .filter(someObject -> (if(string != null) someobject.getName == string)) 
      // The second problem is to collect custom map like 
      .collect(Collectors.toMap("customField1"), someObject.getName()) ... // I need somehow put some additional custom fields here 
} 

अब मैं इकट्ठा कर रहा हूँ कस्टम मानचित्र उस तरह:

Map<String, Object> someMap = new LinkedHashMap<>(); 
      someMap.put("someCustomField1", someObject.Field1()); 
      someMap.put("someCustomField2", someObject.Field2()); 
      someMap.put("someCustomField3", someObject.Field3()); 

उत्तर

9

बस की जाँच, चाहे आप फिल्टर लागू करने की जरूरत है और उसके बाद का उपयोग filter विधि या इसका उपयोग न करें:

protected List<Map<String, Object>> populate(List<SomeObject> someObjects, String string) { 
    Stream<SomeObject> stream = someObjects.stream(); 
    if (string != null) { 
     stream = stream.filter(s -> string.equals(s.getName())); 
    } 
    return stream.map(someObject -> { 
     Map<String, Object> map = new LinkedHashMap<>(); 
     map.put("someCustomField1", someObject.Field1()); 
     map.put("someCustomField2", someObject.Field2()); 
     map.put("someCustomField3", someObject.Field3()); 
     return map; 
    }).collect(Collectors.toList()); 
} 
4

इस के साथ प्रयास करें: या नहीं

protected List<Map<String, Object>> populate(List<SomeObject> someObjects, String string) { 
    return someObjects.stream() 
      .filter(someObject -> string == null || string.equals(someObject.getName())) 
      .map(someObject -> 
       new HashMap<String, Object>(){{ 
        put("someCustomField1", someObject.Field1()); 
        put("someCustomField2", someObject.Field2()); 
        put("someCustomField3", someObject.Field3()); 
       }}) 
      .collect(Collectors.toList()) ; 
} 
+4

जावा 9 में, आप Map.of() के साथ भयानक आंतरिक वर्ग निर्माण को प्रतिस्थापित कर सकते हैं। –

+0

@BrianGoetz आपसे मिलकर अच्छा लगा! मैंने अभ्यास में जावा समरूपता पढ़ी और मुझे यह पसंद है! –

+0

@ डेविडपेरेज़ कैबरेरा या जावा-9 के लिए प्रतीक्षा न करें और अमरूद इम्यूटेबल मैप.ओफ़() – Eugene

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