리루
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 |