공부 기록/Java with ChatGPT

[Java/ChatGPT] Day 22: Stream API 고급 활용 & Optional

dev.jelee 2025. 7. 27. 20:17

[ 학습 목표 ]

  1. List<Book>을 Stream으로 가공, 필터링, 정렬
  2. Optional로 NPE 방지 및 결과 처리 (NPE = NullPointerException)

[ 이론 ]

1. 사용 기술

기술 설명
Stream filter(), sorted(), map(), forEach() 등
Comparator Comparator.comparing() 등으로 정렬
Optional 검색 결과가 없을 경우 예외 방지

2. 예시 기능: 검색 + 정렬 고급화

1) 정렬: 출판일 기준 최신순 정렬

books.stream()
  .sorted(Comparator.comparing(Book::getPublishedDate).reversed())
  .forEach(System.out::println);

2) 필터 + 정렬: 특정 작가의 책만 출판일 기준으로 정렬

books.stream()
  .filter(book -> book.getAuthor().equals("조던 피터슨"))
  .sorted(Comparator.comparing(Book::getPublishedDate))
  .forEach(System.out::println);

3) 검색 결과 Optional 처리

Optional<Book> result = books.stream()
  .filter(book -> book.getTitle().equals("클린 코드"))
  .findFirst();

result.ifPresent(System.out::println);

[ 실습 ]

다음 기능을 Stream과 Optional로 구현해보기.

  • 출판 연도 기준 내림차순으로 정렬하여 출력
  • "자바"라는 단어가 제목에 포함된 책만 필터링해서 출력
  • 사용자가 입력한 제목으로 검색 → Optional<Book> 반환 → 결과 출력

 

 

힌트: 메서드 따로 만들기 예시

public Optional<Book> findByTitle(String title) {
  return books.stream()
    .filter(b -> b.getTitle().equalsIgnoreCase(title))
    .findFirst();
}

[ 소스 코드 ]