티스토리 뷰

Java

[Java8] Stream API

먹태 2021. 7. 10. 15:56

Stream

sequence of elements supporting sequential and parallel aggregate operations
연속적이고 병렬적인 집계 연산을 지원하는 순서가 있는 요소

 

1. 쉽게말해 콜렉션이나 연속된 데이터를 처리하는 오퍼레이션 모음

2. 데이터를 담고 있는 저장소(컬렉션)이 아니다

3. 스트림이 처리하는 데이터 소스를 변경하지 않는다(Functionl in nature)

ex)

package java8study;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Spliterator;
import java.util.stream.Collector;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class App2 {

    public static void main(String[] args) {
        List<String> names = new ArrayList<>();
        names.add("Joooooo");
        names.add("Wonnnnn");
        names.add("Jeonggg");
        names.add("Minnnnn");

        Stream<String> stringStream = names.stream().map(s -> s.toUpperCase());
        System.out.println("------ names ------");
        names.forEach(System.out::println);
        System.out.println("------ stringStream ------");
        stringStream.forEach(System.out::println);
    }
}

*하나의 stream이 되는거지 기존 names의 데이터가 바뀌는게 아니다

 

 

4. 스트림으로 처리하는 데이터는 오직 한번만 처리한다

5. 무제한일수도 있다(Short Circuit 메소드로 제한 가능)

6. 중개 오퍼레이션은 근본적으로 lazy하다

  * 중개 오퍼레이션

   - 스트림을 리턴한다

   - filter, map, limit, skip.....

 * 종료 오퍼레이션

  - 스트림을 리턴하지 않는다

  - collect, allMatch, count, forEach ....

 

ex)

package java8study;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Spliterator;
import java.util.stream.Collector;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class App2 {

    public static void main(String[] args) {
        List<String> names = new ArrayList<>();
        names.add("Joooooo");
        names.add("Wonnnnn");
        names.add("Jeonggg");
        names.add("Minnnnn");

        Stream<String> stringStream = names.stream().map(String::toUpperCase);

        System.out.println("========== 중개오퍼레이션만 있을때 ============");
        names.stream().map((s) -> {
            System.out.println(s);
            return s.toUpperCase();
        });

        System.out.println("=========== 종료오퍼레이션 추가 ============");
        List<String> list =  names.stream().map((s) -> {
            System.out.println(s);
            return s.toUpperCase();
        }).collect(Collectors.toList());
    }
}

* 위에건 중개 오퍼레이션으로만 구성되어있어서 stream만 리턴하는거지 실행이 안되는건 아님

 

7. 손쉽게 병렬 처리할 수 있다

-parallelStream

 

 

 

강의 : 인프런 더 자바, Java8

댓글
최근에 올라온 글
최근에 달린 댓글
링크
Total
Today
Yesterday