WEB/Spring

[Java]stream 살펴보기_(1)등장 배경, 컬렉션과의 차이

MoonSta 2023. 5. 21. 13:03

2023.03.29 - [Languages/Java] - [Java] 컬렉션(Collection)의 개념과 구조 파악 하기

 

[Java]컬렉션(Collection)의 개념과 구조 파악 하기

📌컬렉션(Collection)의 개념과 구조 파악 하기 JAVA의 컬렉션(collection>이란 데이터의 집합을 의미하며 컬렉션 프레임워크(collection framework)란 다수의 데이터를 쉽고과적으로 처리할 수 있는 표준화

mooonstar.tistory.com

 기존의 컬렉션 데이터에 대한 데이터의 처리를 하기 위해선 for, foreach문과 같은 반복을 통해 필요한 데이터를 필터링하는 작업이 필요했습니다. 하지만 사이즈가 크거나 복잡한 처리를 요구하는 작업에서의 성능 문제가 발생하였고, Java 8 이후의 stream이 등장하였습니다. stream은 컬렉션 데이터를 함수형으로 쉽게 처리 가능하며, 별도의 조건 없이 병렬 처리를 가능하게 해 준다.

 

 

📌스트림이전 컬렉션 데이터의 처리 방법

String arr = {"Korea", "Germany", "Japan", "China"}
List<String> list = Arrays.asList(arr);

System.out.println(list);
//[Korea, Germany, Japan, China]

list.add("Thailand");	//원본 데이터의 직접 추가
System.out.println(list);
//[Korea, Germany, Japan, China, Thailand]

for(String str : arr) {
	System.out.println(str);
}

//Korea
//Germany
//Japan
//China

 보통 위와 같은 방법으로 데이터를 처리한다. 하지만 위의 방법은 원본 데이터의 직접적인 변경을 하게 된다. 이제 stream API를 사용하여 더욱 간단하게 작성해 보도록 하자.

 

📌Stream API 알아보기 

String arr = {"Korea", "Germany", "Japan", "China"}
List<String> list = Arrays.asList(arr);

System.out.println(list);
//[Korea, Germany, Japan, China]

//별도의 스트림을 생성
Stream<String> stream = list.stream();
stream.sorted().forEach(System.out::println);

//Korea
//Germany
//Japan
//China

 

📌Stream API의 특징

  • 원본 데이터의 변형 없이 별도의 stream을 생성한다.
  • 여러 번 사용할 수 없다.
  • 내부 반복으로 여러 가지 처리가 가능하다.

 

📌Stream의 연산 처리 과정

  1. stream 객체를 생성한다.
  2. 별도로 생성된 stream에 대한 가공 한다.
  3. 가공된 데이터를 필요한 형태로 변환한다.

String arr = {"Korea", "Germany", "Japan", "China"}
List<String> list = Arrays.asList(arr);

System.out.println(list);
//[Korea, Germany, Japan, China]

//1.별도의 스트림을 생성
Stream<String> stream = list.stream();

stream
  .filter(str -> s.startsWith("K")) //2.필요한 연산
  .map(String::toUpperCase)         //2.필요한 연산
  .sorted()                         //2.필요한 연산
  .count();                         //3.결과 만들기