STREAM API

박상준·2022년 8월 18일
0

면접지식

목록 보기
6/32

Stream API?

컬렉션의 요소를 하나씩 참조해 람다식으로 처리할 수 있는 반복자

JAVA 8이전

  • HOW 중심의 코드.. 단순히 count를 평균을 구하기 위하여 사실상 필요없는 변수들이 너무 많이 사용되었다.

JAVA 8 이후

  • 직장인 들을 가지고 있는 객체에 지시를 하면 연산가능
  • WHAT중심의 코드 → 내부 반복 코드

자료구조가 포함하느 모든 값을 메서드에 포함하는 컬렉션과 다르게, 스트림은 요청할 때만 요소를 계산하는 고정된 자료구조를 가집니다.

  • 스트림은 여러 개의 조건이 중첩된 상황에서 값이 결정나면 불필요한 연산을 진행하지 않고 조건문을 빠져나와 실행 속도를 높입니다.

이러한 것을,

SHORT CURCUIT 이라고 합니다.

스트림 사용법

이를 파이프라이닝이라고 합니다.

스트림에는 

1. STREAM : 스트림의 생성
2. FILTER & MAP : 중간 연산자
3. COLLECT : 최종 연산자

가 존재합니다.

flatMap

  • 정의 스트림 평면화라는 이름으로도 불립니다
    animal = ["cat","dog"]
    • 리스트에 스트림을 적용하여 cat과 dog의 철자 하나하나를 분리해서 새로운 리스트로 만드는 작업진행

    • map을 사용해서 철자들을 분리해보겠습니다.

      List<String[]> results = animals.stream().map(animal -> animal.split(""))
                                      .collect(Collectors.toList());
    • 분명 split 메서드를 이용하여 철자를 모두 분리했는데 반환값 타입을 보면 List<String[]>이 나온것을 알 수 있습니다.

      [  [  "c", "a", "t"  ] , [ "d", "o", "g" ]  ]
    • animal 리스트 내부에서 각각의 요소별로 리스트를 중복으로 만듬.

    • 그렇다면, 하나의 스트림에 철자 하나하나가 다 들어가게 하려면?

      List<String> results = animals.stream().map(animal -> animal.split(""))
              .flatMap(Arrays::stream)
              .collect(Collectors.toList());
    • String 리스트를 감싸고 있는 더 큰 스트림의 구성요소로 만들어 줄 수 있다.

      results = [c, a, t, d, o, g]

      flatMap을 사용하면 중복 구조로 되어있는 리스트를 하나의 스트림처럼 다룰 수 있습니다.

profile
이전 블로그 : https://oth3410.tistory.com/

0개의 댓글