JAVA/Stream
[Java] Stream > Filter
앵낄낄
2023. 5. 31. 16:04
반응형
Git
https://github.com/ymwoo88/stream/tree/feature/filter-%EC%98%88%EC%A0%9C
설명
Stream의 Filter API는 Predicate에서 true를 반환하는 데이터만 존재하는 Stream을 리턴하는 기능을 제공합니다.
- filter는 and조건으로 중첩적용이 가능하나 or조건은 사용되지 않습니다.
Filter
Stream<T> filter(Predicate<? super T> predicate);
예제
샘플 데이터
@Getter @Builder @NoArgsConstructor @AllArgsConstructor @ToString public class User { private Long id; private String name; private String email; private Integer age; public static User getUserAmil() { return User.builder() .id(1L) .name("amil") .email("amil@ymwoo.com") .age(35) .build(); } public static User getUserBenny() { return User.builder() .id(2L) .name("benny") .email("benny@ymwoo.com") .age(29) .build(); } public static User getUserCho() { return User.builder() .id(3L) .name("cho") .email("cho@ymwoo.com") .age(33) .build(); } public static List<User> getExamUserList() { return Arrays.asList(getUserAmil(), getUserCho(), getUserBenny()); } }
예제1) 단건 필터링
@Test @DisplayName("user name이 amil 인경우 필터링") void case1() { List<User> examUserList = User.getExamUserList(); List<User> filteredUser = examUserList .stream() .filter(user -> "amil".equals(user.getName())) .toList(); // 결과 출력 filteredUser .forEach(user -> log.info(">>> Filtered User Info = {}", user)); }
15:30:32.130 [Test worker] INFO com.ymwoo.stream.filter.StreamFilterTest -- >>> Filtered User Info = User(id=1, name=amil, email=amil@ymwoo.com, age=35)
예제2) 다건 필터링
@Test @DisplayName("30대 이하이면서 일하는 중인경우 필터링") void case2() { List<User> examUserList = User.getExamUserList(); List<User> filteredUser = examUserList .stream() .filter(user -> 30 > user.getAge()) .filter(User::getIsWorking) .toList(); // 결과 출력 filteredUser .forEach(user -> log.info(">>> Filtered User Info = {}", user)); }
15:52:12.338 [Test worker] INFO com.ymwoo.stream.filter.StreamFilterTest -- >>> Filtered User Info = User(id=1, name=amil, email=amil@ymwoo.com, age=25, isWorking=true) 15:52:12.345 [Test worker] INFO com.ymwoo.stream.filter.StreamFilterTest -- >>> Filtered User Info = User(id=2, name=benny, email=benny@ymwoo.com, age=29, isWorking=true)
참조
반응형