2016-10-05 25 views
4

我有一個List如何將OR過濾器應用於java.util.stream?

List<String> mylist=Arrays.asList("Abla","Tbla","Cbla"); 

我有我的流準備2個過濾器:

Predicate<String> startswith_A= s-> s.startsWith("A"); 
Predicate<String> startswith_T= s-> s.startsWith("T"); 

以下爲 「A」 例如過濾器:

mylist.stream().filter(startswith_A).forEach(mystring -> { 
    System.out.println("filtered : " + mystring); 
}); 

我怎樣才能應用相同的過濾器「A」或「T」?

喜歡的東西:

mylist.stream().filter(startswith_A || startswith_T).forEach(mystring -> { 
    System.out.println("filtered : " + mystring); 
}); 

我不想創造這樣一個新的斷言:

Predicate<String> startswith_A_or_T= s-> s.startsWith("T") || s.startsWith("A"); 

我怎樣才能做到這一點有2個獨立的Predicate S'

+2

https://docs.oracle.com/javase/8/docs/api/java/util /function/Predicate.html#or-java.util.function.Predicate- –

+1

爲什麼匿名函數不符合您的要求? mylist.stream()。filter(s - > s.startsWith(「A」)|| s.startsWith(「T」))。forEach(System.out :: println); –

回答

8

你可以簡單地使用之間:

mylist.stream() 
     .filter(startswith_A.or(startswith_T)) 
     .forEach(mystring -> { System.out.println("filtered : " + mystring); }); 

結果:

filtered : Abla 
filtered : Tbla 
+1

謝謝。現在我懂了。 –

相關問題