2016-10-05 2 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 с?

+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

Вы могли бы просто использовать .or между 2 Predicates:

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

Результат:

filtered : Abla 
filtered : Tbla 
+1

спасибо. Теперь я понял. –

Смежные вопросы