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와 같은 최종연산이 적용될때
중개 연산도 실행된다.
반응형