티스토리 뷰
스트림(Stream)
Stream : 배열, 컬렉션 등의 데이터를 하나씩 참조하여 함수형으로 처리하는 방법.
스트림의 요소
- 생성
: 스트림의 생성.
- 배열의 경우
int arr1[] = new int[]{1, 2, 3}; IntStream st1 = Arrays.stream(arr1); String arr2[] = new String[]{"a", "b", "c"}; Stream st2 = Arrays.stream(arr2);
- 컬렉션의 경우
HashSet set = new HashSet(); Stream st2 = set.stream();
- Builder : 스트림에 데이터를 추가하는 연산. 모든 연산이 끝난 이후 .build()를 입력하여 종료.
Stream st = Stream.builder().add(1).add(2).add(3).build(); st.forEach(System.out::print); // output : 123
- Generate : 스트림에 같은 데이터를 여러 개 복제하여 입력하는 연산. 람다식으로 작동하며, .limit()로 갯수 제한.
Stream st = Stream.generate(() -> "duplicate ").limit(3); st.forEach(System.out::print); // output : duplicate duplicate duplicate
- Iterate : Generate와 유사하지만, 초기값과 람다식 함수를 넣어 반복 연산을 하여 값을 입력. .limit()로 갯수 제한.
Stream st = Stream.iterate(1, n -> n*2).limit(10); st.forEach(num -> System.out.printf("%4d", num)); // output : 1 2 4 8 16 32 64 128 256 512
- 기본 타입 스트림 : 기본형을 range(또는 rangeClosed; 끝 범위 포함)로 범위를 정해 입력.
IntStream st = IntStream.range(1, 6); // 끝범위를 포함하지 않음. 1~5 st.forEach(System.out::print); // output : 12345
- 중개 연산 (가공 단계)
: 조건에 따라 데이터를 편집하는 단계. return값이 필요한 연산으로, 바로 출력을 할 것이 아니면 변수에 저장해야 함.
- Filter : 조건에 맞는 데이터만 남도록 필터링하는 연산.
IntStream st = IntStream.rangeClosed(1, 10); st = st.filter( n -> n%2 == 0); st.forEach(num -> System.out.printf("%d ", num)); // output : 2 4 6 8 10
- Mapping : 데이터 요소마다 함수식이 적용 된 값으로 변경하는 연산.
IntStream st = IntStream.rangeClosed(1, 10); st = st.map(n -> n*2); st.forEach(num -> System.out.printf("%d ", num)); // output : 2 4 6 8 10 12 14 16 18 20
- Sorting : 데이터의 요소를 정렬하는 연산.
int arr[] = {9, 7, 3, 2, 6}; IntStream st = Arrays.stream(arr); st.sorted().forEach(System.out::print); // output : 23679
- 최종 연산 (출력 단계)
: 마지막 연산을 통해 결과값을 추출하는 연산. sum, average, min, max, reduce forEach 등이 있다.
: forEach를 제외하고는 .get()또는 .getAsInt(), .getAsDouble() 등으로 출력이 가능.
- Reduce : 데이터의 누적 계산 값을 구하는 연산.
int arr[] = {1, 2, 3, 4, 5}; IntStream st = Arrays.stream(arr); System.out.println(st.reduce((x, y)-> x*y).getAsInt()); // 1*2 = 2 -> 2*3 = 6 -> 6*4 = 24 -> 24*5 = 120
'언어 > 자바' 카테고리의 다른 글
[JAVA/기초] HashSet을 이용한 집합연산 (0) | 2022.11.14 |
---|---|
[JAVA/기초] 클래스와 다형성(Polymorphism) (0) | 2022.11.07 |
[JAVA/기초] String : .equals()와 ==의 차이, 그리고 StringBuffer (0) | 2022.11.03 |
댓글