리루
Steam 본문
Stream
-https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html
- Sequence of elements supporting sequential and parallel aggregate operations.
- 연속된 데이터를 처리하는 Operation의 모임
- 데이터를 담는 저장소가 아니라 데이터를 소스로 사용해서 어떠한 처리를 하는 것
- Functional in nature : Stream으로 전달받은 데이터 다체를 변경하는게 아니라 또다른 Stream을 반환한다.
- 들어오는 데이터가 무제한일 수 있다.
- 들어오는 데이터가 무제한일 때 Short Circuit 메소드를 사용해 제한할 수 있다.
- Stream 이 제공하는 Operation은 계속해서 이어지는 중계형 Operation(Stream을 반환)과 종료 Operation(Stream이 아닌 다른 형태를 반환)으로 나눌 수 있다. (forEach도 stream 반환이 아니라 종료 Operation이다)
- Stream 데이터 소스는 오직 터미널 오퍼네이션을 실행할 때에만 처리한다. (중계형 Operation들은 Lazy하게 동작한다.)
package com.example.demok; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; public class RunSomething { public static void main(String[] args) { } public void run(){ List<String> alphabet = new ArrayList<>(); alphabet.add("a"); alphabet.add("b"); alphabet.add("c"); alphabet.add("d"); alphabet.add("e"); // Do nothing because of no terminate operation alphabet.stream().map( s -> { System.out.println(s); return s.toUpperCase(); }); // Return a list List<String> upperCases = alphabet.stream().map( s -> { System.out.println(s); return s.toUpperCase(); }).collect(Collectors.toList()); } }
pallarel stream
- ForkJoinPool 을 이용해 여러개의 Thread를 사용해 병렬로 동작한다.
- 무조건 paralleaStream을 사용한다고 빠른 것은 아니다.(Context Switch에 시간이 더 걸리는 케이스가 있을 것.)
@Test public void streamTest(){ List<String> alphabet = new ArrayList<>(); alphabet.add("a"); alphabet.add("b"); alphabet.add("c"); alphabet.add("d"); alphabet.add("e"); List<String> list = alphabet.parallelStream().map( s -> { System.out.println(s + ", " + Thread.currentThread().getName()); return s.toUpperCase(); }).collect(Collectors.toList()); /* c, main a, ForkJoinPool.commonPool-worker-3 e, ForkJoinPool.commonPool-worker-2 b, ForkJoinPool.commonPool-worker-1 d, ForkJoinPool.commonPool-worker-4 */ }
'# Study > JAVA' 카테고리의 다른 글
Java8 - Optional (0) | 2020.07.05 |
---|---|
Java8 함수형 인터페이스 (0) | 2020.07.04 |
[퍼온글]Volatile 변수 (0) | 2017.03.31 |
[퍼온글]Servlet이란? (0) | 2017.03.31 |