ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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

    댓글

Designed by Tistory.