상세 컨텐츠

본문 제목

[Java8] Stream이란

Backend

by choiDev 2022. 6. 22. 23:52

본문

Stream이란?

  • (컬렉션, 배열)데이터를 다양한 연산을 통해 가공 후 새로운 데이터를 만드는 역할을 합니다.

 

  • Stream이 제공해주는 filter, reduce, map등의 이미 정규화된 연산을 사용하며, for(i)와 같은 증감식 변수를 직접 제어하지않아 변수로 인해 발생하는 에러를 방지합니다.
  • Stream이 제공해주는 filter, reduce, map, collect 같은 여러 연산을 연결해 복잡한 데이터 처리 파이프라인을 만들며 여러 연산이 파이프라인으로 연결되어도 가독성이 좋습니다.
  • Stream은 데이터 연산이 끝나면 Stream이 닫히며 재사용이 불가능합니다.
  • Stream은 명령형이 아닌 선언형으로 코드를 구현할수 있으며 이는 가독성증진, 코드블럭 재조립 용이한 이점이 있습니다.
  •  Stream의 연산은 high-level building block으로 이루어졌으며, 데이터 처리 과정을 병렬화하면서 스레드와 락을 걱정할 필요가 없습니다.

 

 

Stream의 예제

  • Stream은 (컬렉션, 배열)데이터 source를 변경하지 않습니다.
public void filterAdultList(){
     List<Integer> ageList = Arrays.asList(20, 21, 30, 13, 44); //나이 리스트

     List<Integer> adultAgeList = ageList.stream() //성인 나이 리스트
              .filter(age -> age >= 20)
              .collect(Collectors.toList());

     adultAgeList.forEach(age -> System.out.println("adultAgeList age : " + age)); //성인 나이 리스트 출력
     System.out.println("\n");
     ageList.forEach(age -> System.out.println("ageList age :" + age)); //나이 리스트 출력
}

결과 : 
adultAgeList age : 20
adultAgeList age : 21
adultAgeList age : 30
adultAgeList age : 44

/**
아래 결과와 같이 adultAgeList를 만들었다고 해서 
ageList의 데이터가 변경되는것이 아닙니다. 
*/
ageList age :20
ageList age :21
ageList age :30
ageList age :13
ageList age :44

 

 

----- 추가 예제 작성 예정

관련글 더보기