JuBin's personal study blog

자바1.8 Stream API 정리 본문

JAVA

자바1.8 Stream API 정리

JuBin 2020. 9. 20. 19:10
반응형
InputStream, OutputStream이랑은 완전 다른 Stream개념.
컬렉션, 배열에서 쓰임.
코드의 가독성이 좋아진다.


기본문법

Collections, 배열과 같은 객체.스트림생성().중개연산().최종연산;


ex)

List<String> names = Arrays.asList("jeong", "pro", "jdk", "java");
long count = 0;
// names list중 "o"가 포함된 객체갯수 count
count = names.stream().filter(x -> x.contains("o")).count();



ex)

List<String> names = Arrays.asList("jeong", "pro", "jdk", "java");
//이러면 a에는 jeong, pro 2개가 들어있다.
Stream<String> a = names.stream().filter(x -> x.contains("o"));




중개연산 종류
Filter, Map, Peek, Sorted, Limit, Distinct, Skip, MapToInt, MapToLong, MapToDouble


최종연산 종류
count(), min(), max(), sum(), reduce, forEach, collect, iterator, noneMatch, anyMatch, allMatch


 Stream은 재사용이 불가능

ex)

Stream<String> a = names.stream().filter(x -> x.contains("o"));
long count = a.count();
List<String> lists = a.collect(Collectors.toList()); // 불가능 



• 병렬 스트림(parallelStream())은 여러 쓰레드가 작업한다.
ex) 

names.parallelStream().filter(x -> x.contains("o")).count();

>> 여러쓰레드가 처리해줘서 항상 성능면에서 유리해보일수 있지만 애플리케이션에서 사용하는 쓰레드가 많거나,

스트림의 요소 수가 많지 않다면 오히려 쓰레드를 사용하는데 드는 오버헤드가 더 클수있다.


• 중개연산은 미리하지 않는다. 지연연산을 한다.
ex)

Stream<String> a = names.stream().filter(x -> x.contains("o")).map(x-> x.concat("s"));
a.forEach(x -> System.out.println(x));

>> 위와 같은 코드가 있으면 filter와 map 함수는 미리 계산하고 있지 않고 있다가 forEach와 같은 최종연산이 적용될때

중개 연산도 실행된다.




반응형

'JAVA' 카테고리의 다른 글

[Java] ObjectMapper란  (0) 2020.12.23
[JVM] JVM의 Memory영역 ( Stack & Heap&Static )  (0) 2020.11.10
서버 기반 인증 -> token 기반 인증  (0) 2020.10.31
[JAVA 8] 자바1.8 Optional이란?  (0) 2020.09.20
JAVA 8 람다식이란?  (0) 2020.09.20