반응형
자바 8 이상부터 가능한 Stream 기능 중, filter에 대한 내용이다.
filter() 동작 및 예제
1. .stream().filter(Predicate<? super T> predicate)

위와 같이, filter는 주어진 predicate 와 매칭되는 값들에 대해 stream 으로 return 한다고 쓰여있다.
매개변수는 predicate로, Predicate<T>는 boolean 값으로 반환되는 경우 쓰인다.
그렇기 때문에 요소에 대한 조건이 있을 때, for문+if문 보다 간편하게 사용할 수 있다.
2. filter() 로 길이가 3 이상인 문자열 출력하기 ( with lambda expression )
public class filterEx {
public static void main(String[] args) {
List<String> stringNumber = Arrays.asList("one", "two", "three", "four", "five");
stringNumber.stream()
.filter(st -> st.length()>3) // ★
.forEach(System.out::println);
// 출력 : three
}
}
filter() 에서 stream의 element에 대한 boolean-valued function을 전달하면,
그 값이 참인 element 들만 foreach를 통해 출력된다.
3. filter() 로 3의 배수 출력하기 ( with method reference )
public class filterEx {
public static boolean multipleOfThree(int n){
return n % 3 == 0;
}
public static void main(String[] args) {
List<Integer> numbers = List.of(1,2,3,4,5,6,7,8,9,10);
numbers.stream()
.filter(filterEx::multipleOfThree) // ★
.forEach(System.out::println);
// 출력
// 3
// 6
// 9
}
}
메서드를 구현해서 메서드 참조를 사용해도 좋다.
정리
즉, stream의 요소에 대한 조건문을 filter() 함수를 통해 간단하게 구현할 수 있게 된다.
메서드 참조와 람다 표현식 모두 익혀두자.
반응형
'JAVA' 카테고리의 다른 글
| [이펙티브자바] Item1. 생성자 대신 정적 팩터리 메서드를 고려하라 (0) | 2023.10.15 |
|---|---|
| [Java] Access Level 에 관하여 (0) | 2023.09.24 |
| [Java] stream.map() 동작 및 예제 (0) | 2023.08.20 |
| [Java] record 사용방법 및 예제 (0) | 2023.08.06 |
| [Java] stream.reduce() 동작 및 예제 (2) | 2023.07.11 |