타입을 미리 지정하지 않고 사용 시점에서 유연하게 결정할 수 있는 문법
제너릭 클래스 : 클래스 선언 시 <T> 타입 매개 변수를 사용해 다양한 데이터 타입을 안전하게 처리할 수 있음
제너리 ㄱ메서드 - 위와는 별개로 독립적인 타입 매개 변수를 가진 메서드
제너릭을 사용하면 높은 타입 안정성과 재사용성을 얻을 수 있음
ex) 제너릭 클래스
Optional<T>
ArrayList<T>
| 단계 | 설명 | 주요 API |
|---|---|---|
| 1. 데이터 준비 | 컬렉션을 스트림으로 변환 | stream(), parallelStream() |
| 2. 중간 연산 등록 (즉시 실행되지 않음) | 데이터 변환 및 필터링 | map(), filter(), sorted() |
| 3. 최종 연산 | 최종 처리 및 데이터 변환 | collect(), forEach(), count() |
arrayList
.stream() //데이터준비
.map() //중간 연산 등록
.collect() //최종연산
public class Main {
public static void main(String[] args) {
List<Integer> arr = new ArrayList<>(List.of(1, 2, 3, 4, 5));
// filter: 익명 객체로 구현
Predicate<Integer> predicate = new Predicate<>() {
@Override
public boolean test(Integer integer) {
return (integer % 2) == 0;
}
};
// filter: 람다로 구현
Predicate<Integer> predicateLambda = integer -> (integer % 2) == 0;
// filter 활용
List<Integer> filteredArr = arr.stream()
.filter(integer -> integer % 2 == 0)
.collect(Collectors.toList());
System.out.println("filteredArr = " + filteredArr);
}
}