2016-11-29 37 views
5

Tôi đang học lọc bằng cách sử dụng luồng java. Nhưng luồng sau khi lọc không in được gì. Tôi nghĩ rằng phương pháp lọc không được thực hiện. Mã lọc của tôi như sau:Java 8 Stream - Tại sao phương pháp lọc không thực thi?

Stream.of("d2", "a2", "b1", "b3", "c") 
    .filter(s -> { 
     s.startsWith("b"); 
     System.out.println("filter: " + s); 
     return true; 
    }); 

Không có lỗi biên dịch và cũng không ngoại lệ. Bất kỳ đề xuất nào?

Trả lời

12

filter là một thao tác trung gian, thao tác này sẽ chỉ được thực hiện nếu đường ống Luồng kết thúc bằng thao tác đầu cuối.

Ví dụ:

Stream.of("d2", "a2", "b1", "b3", "c") 
    .filter(s -> { 
     s.startsWith("b"); 
     System.out.println("filter: " + s); 
     return true; 
    }) 
    .forEach (System.out::println); 

Vì nó là, phương pháp lọc của bạn là vô ích, vì nó luôn luôn trả true, và do đó thực hiện không lọc.

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