2016-10-05 8 views
4

私が持っているListORフィルタを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"と同じですか?以下のような

何か:私は2別々Predicate秒でこれを行うことができますどのように

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

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

私のような、新たな述語を作成したくありませんか?

+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

あなたは、単に2 Predicates.orを使用することができます。

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

結果:

filtered : Abla 
filtered : Tbla 
+1

今私はそれを得た。 –

関連する問題