Java 8 Stream
Stream?
- 데이터를 담고 있는 저장소
- 스트림 데이터는 오직 한번만 처리 가능
- 스트림이 처리하는 데이터 소스는 변경되지 않는다. (Functional in nature)
- 병렬처리가 가능하다
Stream’s operation
- Intermediate Operation
- Stateless / Stateful (sorted 와 같이 source를참조해야 하는 경우)
- Terminate Operation
Lazy Invocation of Intermediate Operation Terminate Operation 없이 Intermediate Operation을 사용하게 되면 정의만 할 뿐 실제로 실행 되지 않는다. Terminate Operation을 함께 사용하여 실제 결과를 도출 해 내야할때 실행된다.
Stream Creation
- Stream.empty()
- Stream.of()
- Stream.
builder() - Stream.generate()
- Stream.iterate()
- Arrays.stream()
- collection.stream()
- splitAsStream()
- Files.lines()
- Random.double
- parallelStream()
- parallel()
parallel() vs parallelStream() source가 collection인 경우 parallelStream() 을 생성하여 사용할 수 있고, isParallel() 메서드로 병렬로 생성한 스트림인지 여부 확인 가능 다시 한 쓰레드에서 처리되는 스트림으로 변경하고 싶으면 해당 스트림에 sequenctial() 메서드 사용
Stream for Premitives
- IntStream
- LongStream
- DoubleStream
IntStream String을 .chars()를 통하여 스트림으로 변경할 수 있는데, charstream은 따로 존재하지 않아서 IntStream이 사용된다.
Stream API
- 찾기
- filter()
- findAny()
- findFirst()
- anyMatch
- allMatch
- nonMatch
- 모으기
- collect()
-
Collertors를 파라미터로 사용하여 모을 수 있다.
ex) Collectors.toList(), Collectors.groupingBy(), Collectors.collectingAndThen() …
-
- sum()
- max()
- reduce()
- count()
- collect()
- 거르기
- filter()
- range(int startinclusive, int endExclusive)
- rangeClosed(int startInclusive, int endclusive)
- skip()
- limit()
- 변경하기
- map
- flatMap()
map() vs flatMap() collection인 경우 flatMap()을 사용하면 꺼내올 수 있다. map은 다른 타입으로 1:1 매칭시켜 내보내기 위한 용도
Parallel sort
sort()는 단일 스레드, parallelSort()는 멀티 스레드에서 정렬을 해준다. 처리하는 데이터 양이나 cpu 에따라 다르지만 보통 parallelSort()가 더 빠르다고 함.