공부 기록/Java with ChatGPT
[Java/ChatGPT] Day 22: Stream API 고급 활용 & Optional
dev.jelee
2025. 7. 27. 20:17
[ 학습 목표 ]
- List<Book>을 Stream으로 가공, 필터링, 정렬
- 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();
}