구분 | 컬렉션 | 스트림 |
처리 방식 | 다운로드 | 스트리밍 |
저장공간 | 필요 | 불필요 |
반복 방식 | 외부 반복 | 내부 반복 |
코드 구현 | 명령형 | 선언형 |
원본 데이터 | 변경 | 변경하지 않고 소비 |
연산 병렬화 | 어려움 | 쉬움 |
// ArrayList -> Stream
List<String> list = Arrays.asList("1", "2", ...);
Stream<String> ss = list.stream();
// 배열 -> Stream
String[] array = {"A", "B", "C"};
Stream<String> ss2 = Arrays.stream(array);
Stream<String> ss3 = Stream.of(array);
int[] intArray = {1, 2, 3};
IntStream is = Arrays.stream(intArray);
// Stream 메서드
Stream<String> ss4 = Stream.generate(() -> "ha"); // 무한스트림
Stream<Integer> is2 = Stream.iterate((1, n -> n * 2) // 초기값 1이고, 다음 요소는 이전요소에 2를 곱한 값
IntStream is3 = IntStream.rangeClosed(1, 100) // 1부터 100까지
메서드명 | 인자 | 설명 |
filter | Predicate | true인 요소만 필터링 |
map | Function | 다른 요소로 매핑 |
mapToInt | ToIntFunction | int로 매핑 |
mapToLong | ToLongFunction | long으로 매핑 |
mapToDouble | ToDoubleFunction | double로 매핑 |
flatMap | Function | 중첩된 스트림을 평면화 |
sorted | X | 정렬 |
Comparator | 주어진 정렬 기준으로 정렬 | |
peek | Consumer | 특정 연산 수행 |
distinct | X | 중복 제거 |
limit | long maxSize | 스트림 크기를 n으로 제한 |
skip | long n | n개 건너뛰기 |
메서드명 | 인자 | 반환값 | 설명 |
collect | Collector | 특정 자료형으로 변환 | |
toArray | Object[] | 배열로 변환 | |
IntFunction | Object[] | 배열로 변환 | |
min | Comparator | Optional<T> | 최소값 반환 |
max | Comparator | Optional<T> | 최대값 반환 |
count | long | 요소 개수 반환 | |
anyMatch | Predicate | boolean | 한 요소라도 조건을 만족하는지 반환 |
allMatch | Predicate | boolean | 모든 요소가 조건을 만족하는지 반환 |
noneMatch | Predicate | boolean | 모든 요소가 조건을 만족하지 않는지 반환 |
findFirst | Optional<T> | 병렬처리시 stream 순서를 고려하여 가장 첫번째 요소 반환 | |
findAny | Optional<T> | 병렬처리시 가장 먼저 찾은 요소 반환(직렬처리시 findFirst와 동일) | |
forEach | Consumer | void | 연산 수행 |
reduce | BinaryOperator | 원소들을 하나씩 소모해가며 누적 계산을 수행하고 결과값 반환 |
내가 실무에서 스트림을 사용하는 방법
우종정, 「쉽게 배우는 자바 프로그래밍」, 한빛아카데미
https://docs.oracle.com/javase/8/docs/api/
Java Platform SE 8
docs.oracle.com
https://www.elancer.co.kr/blog/detail/255
java stream이란 특징부터 사용하는 이유까지 모두 알려드립니다. I 이랜서 블로그
데이터가 중요해 질수록 강력한 데이터 처리 기능을 선보이며 데이터 처리 효율을 높여주는 ‘Java Stream’를 찾는 사람들이 많아지고 있는데요. 이랜서에서 java stream이란 무엇인지 자세히 알려
www.elancer.co.kr
https://bcp0109.tistory.com/313
Java 8 함수형 인터페이스 (Functional Interface)
Overview 함수형 인터페이스란 1 개의 추상 메소드를 갖는 인터페이스를 말합니다. Java8 부터 인터페이스는 기본 구현체를 포함한 디폴트 메서드 (default method) 를 포함할 수 있습니다. 여러 개의 디
bcp0109.tistory.com
[JAVA] Stream - findAny()와 findFirst()의 차이점
Stream에서 어떤 조건에 일치하는 요소(element) 1개를 찾을 때, findAny()와 findFirst() API를 사용할 수 있습니다. findAny()는 Stream에서 가장 먼저 탐색되는 요소를 리턴하고, findFirst()는 조건에 일치하는
devjjsjjj.tistory.com
https://velog.io/@jwkim/java-stream-reduce-binaryoperator
[Java] Stream의 reduce()와 BinaryOperator
[Java] Stream의 reduce()와 BinaryOperator
velog.io