2016-11-29 35 views
5

Java akışını kullanarak filtrelemeyi öğreniyorum. Ancak filtrelemeden sonra akış hiçbir şey yazdırmıyor. Filtre yönteminin gerçekleştirilmediğini düşünüyorum. şöyle My filtreleme kodudur:Java 8 Akış - Filtre yöntemi neden çalışmıyor?

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

hiçbir derleme hatası ve ayrıca bir istisna vardır. Herhangi bir öneri?

cevap

12

filter Akım boru hattı bir terminal işlemi biter yalnızca çalıştırılacak bir ara işlemdir. Örneğin

:

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

da olduğu gibi, her zaman true döndürür ve dolayısıyla filtreleme yapar, çünkü filtre yöntemi, bir işe yaramaz.