2015-07-29 42 views
6

Khi sử dụng các cuộc gọi Javatrong các biểu thức lambda Java 8, tôi có hai suy nghĩ về việc có đặt tất cả Predicate logic trong một cuộc gọi hay không.Java 8 lambdas nhiều cuộc gọi bộ lọc

Tôi giả định rằng chuỗi cuộc gọi filter(Predicate<? super T> predicate) sẽ không tốn kém vì họ chưa gặp một người kết thúc, vì vậy sẽ sai về mặt khả năng đọc nhưng tôi không đủ tự tin trong kiến ​​thức về API Streams để hiểu đầy đủ về giao dịch -offs là.

Với sự trợ giúp của ví dụ sau (xem xét các biến vị ngữ phức tạp hơn), triển khai nào vượt trội hơn: List<Person> usingOneFilter hoặc 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

Sáu trong số một nửa tá khác. Không có sự khác biệt thực sự; không quan trọng. –

+0

Xin chào Louis, cảm ơn bạn đã nhập liệu. Từ bình luận của bạn tôi sẽ giả định rằng từ một quan điểm hiệu suất nó khá nhiều giống nhau. Trong trường hợp đó, bạn sẽ không đồng ý rằng nhiều cuộc gọi bộ lọc có thể hỗ trợ khả năng đọc, đặc biệt nếu có rất nhiều logic boolean xảy ra trong đó? –

+1

Có lẽ? Tôi cần phải xem trường hợp cụ thể và chắc chắn có điều gì đó mà các nhà phát triển khác nhau sẽ có ý kiến ​​khác nhau. –

Trả lời

10

Trong ví dụ nhỏ, tôi nghĩ khả năng đọc không thực sự bị xâm phạm, nhưng tôi vẫn thích sử dụng các phương pháp lọc riêng biệt. Chắc chắn nếu nó phức tạp hơn.

Điều này thực sự không phải là rất tốn kém. Không có lý do để "tối ưu hóa" nó trừ khi bạn có một vấn đề hiệu suất và profiling tiết lộ rằng đây là nút cổ chai. Nhưng điều đó rất khó xảy ra.

Các vấn đề liên quan