Stream API
원본의 데이터를 변경하지 않고 작업을 처리할 수 있는 API.
기존 JAVA는 객체 지향 언어이기에 함수형 프로그래밍을 지원하지 않았다.
JDK8 부터 Stream API, 람다 등을 지원해 함수형 프로그래밍을 지원한다.
Stream API의 특징
원본의 데이터 변경 X -> 원본의 데이터를 읽어와 별도의 Stream 생성
일회용 -> 한번 사용 후 재사용 불가 (다시 사용시 Exception 발생)
내부 반복 작업 처리 -> 반복문을 내장하여 기존 반복문의 코드 필요 X
Stream 연산
생성
1. Colletion 타입의 Stream 생성
List<String> list = Arrays.asList("a","b","c");
Stream<String> listStream = list.stream();
Stream<String> stream = Stream.of("a","b","c");
IntStream stream = IntStream.range(4,10);
Stream 가공(중간연산)
Filter
List<String> names = new ArrayList<>();
names.add("abc");
names.add("acc");
names.add("bbc");
List<String> nameList = names.stream().filter(name-> name.contains("a")).collect(Collectors.toList());
nameList.forEach(System.out::println);
Map
List<String> upperNames = names.stream().map(s -> s.toUpperCase()).collect(Collectors.toList());
upperNames.forEach(System.out::println);
Sorted
List<String> sortedNames = names.stream().sorted().collect(Collectors.toList());
sortedNames.forEach(System.out::println);
Distinct
List<String> distinctNames = names.stream().distinct().collect(Collectors.toList());
distinctNames.forEach(System.out::println);
Peek -> Stream에 영향을 주지 않고 확인하는 함수
출력 또는 확인용