-
Optional과 stream.filter자바 2023. 3. 10. 16:14
프로젝트를 하는 중 Optional과 관련된 문제가 생겼다.
List<CourseBookMark> findCourse = member.getCourseBookMarkList().stream() .filter(m -> courseRepository.findById(m.getId())) .collect(Collectors.toList());
CourseBookMark를 담는 리스트를 추출해야 한다.
findById는 CourseBookMark를 return하지 않고, Optional<CourseBookMark>를 return시킨다.
따라서 이와같은 오류가 생긴다.
Bad return type in lambda expression: Optional<Course> cannot be converted to boolean
filter란
- filter() 메서드는 중개 연산(intermediate operation)을 수행하므로 새로운 스트림을 생성
- 특정 조건을 만족하는 요소로 구성된 새로운 스트림을 생성
filter메소드는 boolean값을 반환해야한다.
예를 들면
Stream<Integer> filterResult = intList.stream().filter(item -> item % 2 == 0);
item이 %2 연산으로 0이 되면 true로 반환이 되기 때문에 이 조건을 만족하는 결과를 추출할 수 있는 것이다.
다시 본론으로 들어오면 findById로 boolean이 아니라 Optional이 return되기 때문에 오류가 발생하는 것이다.
따라서 다음과 같이 수정해야 한다.
List<CourseBookMark> findCourse = member.getCourseBookMarkList().stream() .filter(m -> courseRepository.findById(m.getId()).isPresent()) .collect(Collectors.toList());
스트림을 사용하면 정말 유용한 상황들이 많은데, 생각보다 쓰는데 익숙치가 않다....
좀더 공부하자,,,!
728x90'자바' 카테고리의 다른 글
자바의 GC 처리 방법 (0) 2023.11.23 Arrays.sort에 관한 간단한 고찰 (0) 2023.07.10 java.util.ConcurrentModificationException 에러 (0) 2023.02.23 [Java] List to Array (0) 2023.01.30 레코드 (0) 2023.01.16