2015-03-21 10 views
5

मैं कोड का एक टुकड़ा लिखा था और आश्चर्य है कि कैसे मैं इसे और अधिक सुरुचिपूर्ण लिख सकते हैं, धाराओं का उपयोग कर यहाँ यह है:धाराओं का उपयोग करके इसे कैसे लिखें? जावा 8

public boolean possibleToAddTask(LocalDate taskDate, final String username) { 
     List<Task> userTasklist = find(username).getTaskList(); 
     for(Task task : userTasklist) { 
      if(task.getDate().equals(taskDate)){ 
       return false; 
      } 
     } 
     return true; 
    } 

यहाँ - कुछ बूलियन एक विधि से दिया जाता है। निर्धारित तिथि को पहले से ही, कुछ काम यह रिटर्न झूठी में मौजूद है अन्यथा सच (ताकि वापसी प्रकार प्रश्न विधि का नाम :) में उठाया उत्तर देता है)

मैं धाराओं पर फिल्टर के साथ कोशिश कर रहा था, लेकिन यह सिर्फ के लिए काम किया थोड़ी देर, और फिर यूनिट परीक्षणों ने मुझे कुछ अप्रत्याशित परिणाम दिए, इसलिए मैंने इसे हटा दिया और इसे ऊपरी की तरह लिखा। अब मैं सुशोभित करने के लिए इसे

पहले से यह इस तरह था चाहते हैं:

public boolean possibleToAddTask(LocalDate taskDate, final String username) { 
     List<Task> userTasklist = find(username).getTaskList(); 

     try { 
      userTasklist.stream().filter(n -> n.getDate().equals(taskDate)).findFirst().get(); 
      return true; 
     } catch (NoSuchElementException e) { 
      return false; 
     } 
    } 

अग्रिम धन्यवाद :)

उत्तर

10

विधि findFirst() एक वैकल्पिक लौट आते हैं। तो आप बस जांच सकते हैं कि वैकल्पिक खाली है या नहीं।

return !userTasklist.stream() 
.filter(n -> n.getDate().equals(taskDate)) 
.findFirst().isPresent(); 

या यहां तक ​​कि आसान दृष्टिकोण।

return !userTasklist.stream().anyMatch(n -> n.getDate().equals(taskDate)); 

संपादित: अब इकाई परीक्षण पास करना चाहिए।

+0

हम्म ... हो सकता है कि यह थोड़ा बेहतर है, क्योंकि यह और अधिक बारीकी से मूल तर्क की नकल करता है। – kuujo

+0

@lusiak सही समाधान होने लगता है, हालांकि इकाई परीक्षण अभी भी नो-स्ट्रीम-समाधान के लिए ठीक है, और स्ट्रीम-समाधान – azalut

+1

के लिए विफलता शायद मुझे पता है क्यों। बस स्ट्रीम की धारा को अस्वीकार करें। –

0

सेट में सूची बदलने lik कुछ कर रही है और फिर बुला के बारे में होता है कैसे():

return userTasklist.stream().map(Task::getDate).collect(Collectors.toSet()).contains(taskDate); 
संबंधित मुद्दे