如何将OR过滤器应用于java.util.stream?

mcf*_*oft 4 java java-8 java-stream

我有一个List:

List<String> mylist=Arrays.asList("Abla","Tbla","Cbla");
Run Code Online (Sandbox Code Playgroud)

我为我的流准备了2个过滤器:

Predicate<String> startswith_A= s-> s.startsWith("A");
Predicate<String> startswith_T= s-> s.startsWith("T");
Run Code Online (Sandbox Code Playgroud)

以下是"A"的示例过滤器:

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

如何将相同的内容应用于过滤器"A"或"T"?

就像是:

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

我不想创建一个新的谓词,如:

Predicate<String> startswith_A_or_T= s-> s.startsWith("T") || s.startsWith("A");
Run Code Online (Sandbox Code Playgroud)

我怎么能用2个单独的Predicates 做到这一点?

Unh*_*lig 8

你可以简单地.or在2之间使用Predicates:

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

结果:

filtered : Abla
filtered : Tbla
Run Code Online (Sandbox Code Playgroud)