컬렉션 데이터를 “선언적으로 처리”하기 위한 API
(반복, 필터링, 변환, 집계 등을 파이프라인으로 표현
데이터 소스
↓
중간 연산 (0~N)
↓
최종 연산 (1)
List<String> names = List.of("kim", "lee", "park");
List<String> result =
names.stream() // 소스
.filter(n -> n.length() > 3) // 중간
.map(String::toUpperCase) // 중간
.toList(); // 최종
중간 연산 (Stream 반환)
| 메서드 | 설명 |
| filter | 조건 필터 |
| map | 변환 |
| flatMap | 평탄화 |
| distinct | 중복 제거 |
| sorted | 정렬 |
| limit / skip | 개수 제한 |
최종 연산
| 메서드 | 설명 |
| forEach | 소비 |
| toList / collect | 컬렉션 |
| findFirst / findAny | 하나 |
| anyMatch / allMatch | 조건 |
| count | 개수 |
| reduce | 축약 |
Optional이란?
“null이 올 수 있음”을 타입으로 표현
① 값 있으면 실행
opt.ifPresent(u -> log.info(u.getName()));
② 값 있으면 변환
String name =
opt.map(User::getName)
.orElse("UNKNOWN");
③ 없으면 예외
User user =
opt.orElseThrow(() -> new IllegalStateException("없음"));
④ 없을 때 대체 로직
User user =
opt.orElseGet(this::createDefaultUser);'WEB개발 > JAVA' 카테고리의 다른 글
| 람다 Lambda (0) | 2026.01.21 |
|---|---|
| Checked Exception, Unchecked Exception (Runtime Exception) (0) | 2025.12.08 |
| [JAVA - NIO] New Input/Output (0) | 2025.12.04 |
| Daemon Thread vs User Thread (0) | 2025.02.21 |
| CyclicBarrier, CountDownLatch (0) | 2025.02.21 |