[ 학습 목표 ]
- 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();
}
[ 소스 코드 ]
'공부 기록 > Java with ChatGPT' 카테고리의 다른 글
[Java/ChatGPT] Day 21: 파일 기반 데이터 저장 및 로딩 (실제 시스템처럼) (0) | 2025.07.25 |
---|---|
[Java/ChatGPT] Day 20: 날짜(LocalDate) 활용 & 조건 기반 검색 기능 (0) | 2025.07.24 |
[Java/ChatGPT] Day 19: 예외 처리와 파일 연동 실전 연습 (0) | 2025.07.16 |
[Java/ChatGPT] Day 18: 파일 입출력 (File I/O) (0) | 2025.07.14 |
[Java/ChatGPT] Day 17: 람다식 (Lambda) & 스트림 (Stream) (0) | 2025.07.09 |