본문 바로가기
개발/자바

java8 ) Stream (in 컬렉션 프레임 워크)

by kakk789 2022. 8. 6.

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
반응형

댓글