Stream
- 1.8이후부터 추가된 컬렉션 프레임워크 Stream의 특징
- 컬렉션의 수 만큼 반복 수행하여 어떠한 작업을 수행시킬 수 있음
- 쉽게말해 Set, Map, List 엘리먼트값 추출 시 for문을 여러번 사용하는 불편함을 없애기 위한 개념이라고 이해할 것
- 우선 몇가지만 살펴보자
Stream을 사용하면 반환 값도 Stream이기 때문에 List로 바꿔주면 좋음
.collect(Collectors.toList());
collect 함수
- 내 앞의 원소와 특정 작업을 할 때 사용 (reduce와 비슷)
List<String> names = Arrays.asList("Sehoon", "Songwoo", "Chan", "Youngsuk", "Dajung");
System.out.println(names.stream()
.map(String::toUpperCase)
.collect(Collectors.joining(", ")));
reduce 함수
- 내 앞의 원소와 연산을 할 때 사용
- 매개변수 - 2개
- 반환 요소 - 연산을 수행한 최종 값 1개
ArrayList<Integer> list = new ArrayList<Integer>(Arrays.asList(1,2,3,4,5));
int r = list.stream().reduce(0, (a,b)->{
return a*b;
}).get();
System.out.println(r);
distinct 함수
- 컬렉션의 요소에 대한 중복제거
중복 제거할 컬렉션.stream().distinct();
ArrayList<String> list = new ArrayList<String>
(Arrays.asList("apple","grapes", "watermelon", "grapes", "strawberry"));
list.stream().distinct().collect(Collectors.toList());
map 함수
- 스트림 요소에 대해 함수가 적용된 결과의 새로운 요소로 매핑
- 맵은 나 본인의 원소를 가지고 연산
- 매개변수 - 1개
- 반환 요소 - 원본 배열의 요소 만큼 반환
ArrayList<String> list = new ArrayList<String>
(Arrays.asList("apple","grapes", "watermelon", "grapes", "strawberry"));
list.stream().map(a-> a.toUpperCase()).collect(Collectors.toList());
filter 함수
- map과 비슷하지만 조건에 맞는 것만 연산 후 배열로 담김 ( boolean 결과를 리턴하는 람다 표현식이 필요 )
- 매개변수 - 1개
- 반환 요소 - 조건에 만족하는 원본 배열의 요소 만큼 반환
ArrayList<Integer> list = new ArrayList<Integer>(Arrays.asList(-1,2,4,9,-2,-3));
List<Integer> list2 = list.stream().filter(a->a>0).collect(Collectors.toList());
flatMap
- flatMap(스트림 요소가 배열일 때) : 각 배열의 각 요소의 반환값을 하나로 합친 새로운 스트림을 반환
- 한마디로 배열을 1차원으로 평면화 시킴
- 해당 경로 참고 : https://dlckdgml.tistory.com/403
반응형
'개발 > 자바' 카테고리의 다른 글
Rest API 연동 시 Http 상태 코드 400 발생 시 (0) | 2022.11.16 |
---|---|
자바) [Ljava.lang.String; cannot be cast to class java.lang.String (0) | 2022.08.08 |
Java ) 인터페이스를 객체로 만들기 (0) | 2022.08.04 |
Java ) 함수형 인터페이스(FunctionalInterface) (0) | 2022.08.03 |
Java ) Lambda(람다) (0) | 2022.08.02 |
댓글