Java 8에 도입된 Java Streams는 개발자가 컬렉션을 처리하고 데이터를 조작하는 방식 혁신적이고 강력하게 제공할 수 있는 함수형 프로그래밍이다.
데이터 처리를 선언적이고, 간결하게 제공해 더욱 효율적으로 코드를 작성할 수 있단 장점을 가지고 있다.
선언적인 방식으로 배열, 컬렉션 같은 요소를 처리할 수 있게 해준다.
데이터 변환 및 작업 파이프라인을 생성할 수 있다.
Collection.stream()Arrays.stream(array)Stream.builder().add(element_1).add(element_2).build()Files.lines(Path)Stream.iterate(seed, function) or Stream.generate(supplier)중간작업, 최종작업을 나눠서 지원한다. 중간작업은 게으르고 새 스트림을 반환하는 반면, 최종작업은 데이터를 처리하고 결과를 반환한다.
filter(Predicate) : 주어진 조건을 기준으로 요소 필터링map(Function) : 주어진 함수를 사용해 요소를 변환flatMap(Function) : 요소를 스트림으로 변환하고 결과 스트림을 평면화distinct() : 중복된 요소를 제거, 고유한 요소 포함된 스트림 반환sorted(Comparator) : 주어진 비교기준으로 정렬peek(Consumer) : 원본 Stream을 수정하지 않고 각 요소에 대한 작업을 수행forEach(Consumer) : 각 요소에 대한 작업 수행toArray() : 요소를 배열로 수집reduce(BinaryOperator) : 요소를 단일 값으로 줄임collect(Collector) : 요소를 변경 가능한 컨테이너로 수집min(Comparator) max(Comparator) : 최소 또는 최대 요소를 찾음count() : 요소의 개수를 계산anyMatch(Predicate), allMatch(Predicate), noneMatch(Predicate) : 조건에 일치 여부 반환findFirst(), findAny() : 주어진 조건을 만족하는 첫번째 혹은 모든 요소 검색참고자료