hellozin / TIL

공부한 내용을 정리하는 저장소입니다
1 stars 0 forks source link

Stream에서 or 조건으로 filter를 적용할 수 있을까? #4

Closed hellozin closed 4 years ago

hellozin commented 4 years ago
for (item : items) {
    if (condition 1) {
        ...
    } else if (condition 2) {
        ...
    }
}

이와 같은 경우 stream filter로 해결할 수 있을까?

hellozin commented 4 years ago

간단하게는 아래와 같이 표현할 수 있다. items.stream().filter(item -> condition1 || condition2);

predicate의 and()or() 를 사용할 수도 있다. items.stream().filter(predicate1.or(predicate2);

여러 predicate를 한번에 적용하려면 predicate의 list를 사용하면 된다.

List<Predicate> predicates = ...
items.stream().filter(predicates.stream().reduce(x -> true, Predicate::or));

Reference