2015-07-29 9 views
6

कॉल जावा 8 लैम्ब्डा भाव में filter(Predicate<? super T> predicate) कॉल का उपयोग कर, मैं के बारे में है कि क्या एक कॉल में सभी Predicate तर्क डाल करने के लिए दो मन में कर रहा हूँ, या श्रृंखला के लिए filter(Predicate<? super T> predicate) जहां उपयुक्त हो पठनीयता सहायता करने के लिए कहता है।जावा 8 lambdas कई फिल्टर

मुझे लगता है कि filter(Predicate<? super T> predicate) कॉल चेनिंग सस्ती क्योंकि वे नहीं किया है अभी तक एक टर्मिनेटर से मुलाकात होगी, इसलिए पठनीयता की ओर गलती हैं, लेकिन मैं नहीं आश्वस्त पर्याप्त पूरी तरह से समझने के लिए व्यापार Streams एपीआई की मेरी जानकारी में हूँ -ऑफ हैं।

निम्नलिखित उदाहरण की सहायता से (अधिक जटिल भविष्यवाणियों पर विचार करें), जो कार्यान्वयन बेहतर है: List<Person> usingOneFilter या List<Person> usingTwoFilters?

import java.util.Arrays; 
import java.util.List; 
import java.util.stream.Collectors; 

public class SEExample { 

    private static class Person { 
     private final int age; 
     private final int heightInCm; 

     public Person(int age, int heightInCm) { 
      this.age = age; 
      this.heightInCm = heightInCm; 
     } 

     public int getAge() { 
      return age; 
     } 

     public int getHeight() { 
      return heightInCm; 
     } 
    } 

    public static void main(String[] args) { 
     List<Person> people = Arrays.asList(
       new Person(14, 140), 
       new Person(15, 140), 
       new Person(16, 150), 
       new Person(17, 120)); 
     List<Person> usingOneFilter = people 
       .stream() 
       .filter(p -> p.getAge() >= 16 && p.getHeight() >= 130) 
       .collect(Collectors.toList()); 
     List<Person> usingTwoFilters = people 
       .stream() 
       .filter(p -> p.getAge() >= 16) 
       .filter(p -> p.getHeight() >= 130) 
       .collect(Collectors.toList()); 
    } 

} 
+2

एक में से छह, दूसरे के आधा दर्जन। कोई वास्तविक अंतर नहीं; कोई फर्क नहीं पड़ता। –

+0

हाय लुइस, आपके इनपुट के लिए धन्यवाद। आपकी टिप्पणी से मैं मानता हूं कि एक प्रदर्शन परिप्रेक्ष्य से यह काफी समान है। उस स्थिति में, क्या आप इस बात से सहमत नहीं होंगे कि एकाधिक फ़िल्टर कॉल पठनीयता की सहायता कर सकते हैं, खासकर यदि वहां बहुत सारे बुलियन तर्क चल रहे हैं? –

+1

शायद? मुझे विशिष्ट मामला देखने की ज़रूरत होगी, और यह निश्चित रूप से कुछ अलग-अलग डेवलपर्स पर अलग-अलग विचार होंगे। –

उत्तर

10

इतनी छोटी उदाहरण में मुझे लगता है कि पठनीयता वास्तव में समझौता नहीं किया है, लेकिन मैं अभी भी अलग फिल्टर तरीकों का उपयोग कर पसंद करते हैं। निश्चित रूप से अगर यह और अधिक जटिल है।

यह वास्तव में बहुत महंगा नहीं है। जब तक आपके पास कोई प्रदर्शन समस्या न हो और प्रोफाइलिंग से पता चलता है कि यह बाधा है तो इसे "ऑप्टिमाइज़" करने का कोई कारण नहीं है। लेकिन यह बेहद असंभव है।