SlideShare uma empresa Scribd logo
1 de 18
스트림(Stream)
1.2 스트림 특징
(2) 내부 반복자를 사용하므로 병렬 처리가 쉽다는 점
스트림(Stream)
1.2 스트림 특징
(2) 내부 반복자를 사용하므로 병렬 처리가 쉽다는 점
스트림(Stream)
2.1 컬렉션으로부터 스트림 얻기
public class FromCollectionExam {
public static void main(String[] args) {
List<Student> list = Arrays.asList(new Student("Jackie", 40), new Student("Hwang", 71),
Stream<Student> stream = list.stream();
stream.forEach(s -> System.out.println(s.getName()));
}
}
스트림(Stream)
2.2 배열으로부터 스트림 얻기
public class FromArrayExam {
public static void main(String[] args) {
String[] strArr = { "Kim", "Lee", "Park" };
Stream<String> strStream = Arrays.stream(strArr);
strStream.forEach(s -> System.out.print(s + ","));
System.out.println();
int[] intArr = { 10, 20, 30, 40, 50 };
IntStream intStream = Arrays.stream(intArr);
intStream.forEach(i -> System.out.print(i + ", "));
}
}
스트림(Stream)
2.3 숫자범위로부터 스트림 얻기
public class FromIntRangeExam {
public static int sum;
public static void main(String[] args) {
IntStream stream = IntStream.rangeClosed(1, 100);
stream.forEach(a -> sum += a);
System.out.println("1 ~ 100 총합: " + sum);
}
}
스트림(Stream)
2.5 디렉토리으로부터 스트림 얻기
public class FromDirectoryExam {
public static void main(String[] args) throws IOException {
Path path = Paths.get("C:/Users/zhfld/workspace/ExampleJava/src/stream");
Stream<Path> stream = Files.list(path);
stream.forEach(p -> System.out.println(p.getFileName()));
}
}
스트림(Stream)
3.1 중간처리와 최종처리
- 스트림은 데이터의 필터링, 매핑, 정렬, 그룹핑 등의 중간 처리와 합계,
평균, 카운팅, 최대값, 최소값 등의 최종 처리를 파이프라인(pipelines)
으로 해결합니다. 파이프 라인은 여러 개의 스트림이 연결되어 있는 구
조를 말합니다. 파이프라인에서 최종 처리를 제외하고는 모두 중간 처
리 스트림입니다.
- 중간 스트림이 생성될 때 요소들이 바로 중간 처리(필터링, 매핑, 정렬)
되는 것이 아니라 최종 처리가 시작되기 전까지 중간 처리는 지연(lazy)
됩니다.
- 최종 처리가 시작되면 비로소 컬렉션의 요소가 하나씩 중간 스트림에
서 처리되고 최종 처리까지 오게 됩니다.
스트림(Stream)
3.1 중간처리와 최종처리
스트림(Stream)
4. 필터링(distinct(), filter())
- 필터링은 중간 처리 기능으로 요소를 걸러내는 역할을 합니다.
필터링 메소드인 distinct()와 filter() 메소드는 모든 스트림이 가지고 있
는 공통 메소드 입니다.
- distinct() 메소드는 중복을 제거하는 데, Stream의 경우
Object.equals(Object) 가 true 이면 동일한 객체로 판단하고 중복을 제
거합니다.
- IntStream, LongStream, DoubleStream은 동일값일 경우 중복을 제거
합니다.
스트림(Stream)
5. 매핑(flatMapXXX(), mapXXX(), asXXXStream(), boxed())
- 매핑(mapping)은 중간 처리 기능으로 스트림의 요소를 다른 요소로
대체하는 작업을 말합니다.
- 스트림에서 제공하는 매핑 메소드는 flatXXX()와 mapXXX(), 그리
고 asDoubleStream, asLongStream, boxed 가 있습니다.
스트림(Stream)
6. 정렬(sorted())
스트림(Stream)
6. 정렬(sorted())
public class SortingExam {
public static void main(String[] args) {
IntStream intStream = Arrays.stream(new int[] {9, 6, 11, 2, 3});
intStream
.sorted()
.forEach(n -> System.out.print(n + ", "));
System.out.println();
List<Student> studentList = Arrays.asList(
new Student("Jack", 80),
new Student("John", 100),
new Student("Andy", 99),
new Student("Jolie", 70)
);
studentList.stream()
.sorted()
.forEach(s -> System.out.print(s.getScore() + ", "));
System.out.println();
studentList.stream()
.sorted( Comparator.reverseOrder())
.forEach(s -> System.out.print(s.getScore() + ", "));
}
}
스트림(Stream)
7. 루핑(peek(), forEach())
- 루핑(looping)은 요소 전체를 반복하는 것을 말합니다.
- peek() 는 중간 처리 메소드이고, forEach()는 최종 처리 메소드 입니
다.
public class LoopingExam {
public static void main(String[] args) {
int[] intArr = {5, 4, 3, 2, 1};
System.out.println("[peek()를 마지막에 호출한 경우]");
Arrays.stream(intArr)
.filter(a -> a % 2 == 0)
.peek(n -> System.out.println(n)); // 동작하지 않음
System.out.println("[최종 처리 메소드를 마지막에 호출한 경우]");
int total = Arrays.stream(intArr)
.filter(a -> a % 2 == 0)
.peek(n -> System.out.println(n)) // 동작함
.sum();
System.out.println("총합: " + total);
System.out.println("[forEach를 마지막에 호출한 경우]");
Arrays.stream(intArr)
.filter(a -> a % 2 == 0)
.forEach(n -> System.out.println(n)); // 최종 메소드로 동작함
}
스트림(Stream)
8. 매칭(allMatch(), anyMatch(), noneMatch())
- allMatch() 메소드는 모든 요소들이 파라미터로 주어진
Predicate의 조건을 만족하는지 조사하고, anyMatch() 메소드는
최소한 한 개의 요소가 파라미터로 주어진 Predicate의 조건을
만족하는지 조사합니다. 그리고 noneMatch()는 모든 요소들이
파라미터로 주어진 Predicate의 조건을 만족하지 않는지 조사합
니다.
스트림(Stream)
9. 기본 집계(sum(), count(), average(), max(), min())
public class AggregateExam {
public static void main(String[] args) {
int[] intArr = {5, 8, 11, 13, 19, 20, 24};
long count = Arrays.stream(intArr)
.filter( n -> n % 2 == 0)
.count();
System.out.println("2의 배수 개수: " + count);
long sum = Arrays.stream(intArr)
.filter( n -> n % 2 == 0)
.sum();
System.out.println("2의 배수의 합: " + sum);
double avg = Arrays.stream(intArr)
.average()
.getAsDouble();
System.out.println("배열의 평균; " + avg);
int third = Arrays.stream(intArr)
.filter(n -> n % 3 == 0)
.findFirst()
.getAsInt();
System.out.println("3의 배수: " + third);
}
}
스트림(Stream)
10. 커스텀 집계(reduce())
- 스트림은 기본 집계 메소드인 sum(), average(), count(), max(), min()을
제공하지만, 프로그램화해서 다양한 집계 결과물을 만들 수 있도록 reduce()
메소드를 제공합니다.
스트림(Stream)
11. 수집(collect())
- 스트림은 요소들을 필터링 또는 매핑한 후 요소들을 수집하는 최
종 처리 메소드인 collect()를 제공하고 있습니다.
- 이 메소드를 이용하면 필요한 요소만 켈렉션으로 담을 수 있고,
요소들을 그룹핑 한 후 집계(리덕션) 할 수 있습니다.
스트림(Stream)
12. 병렬 처리
- 병렬 처리(Parallel Operation)란 멀티 코어 CPU 환경에서 하나의 작업
을 분할해서 각각의 코어가 병렬적으로 처리하는 것을 말하는 데, 병렬처
리의 목적은 작업 처리 시간을 줄이기 위한 것입니다.
- 자바 8부터 요소를 병렬 처리할 수 있도록 하기 위해 병렬 스트림을 제공
하기 때문에 컬렉션(배열)의 전체 요소 처리 시간을 줄여 줍니다.
12.1 동시성(Concurrency)과 병렬성(Parallelism)
12.2 포크조인(ForkJoin) 프레임워크
12.3 병렬 스트림 생성
12.4 병렬 처리 기능

Mais conteúdo relacionado

Mais procurados

자바스크립트 함수
자바스크립트 함수자바스크립트 함수
자바스크립트 함수유진 변
 
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)MIN SEOK KOO
 
Java8 & Lambda
Java8 & LambdaJava8 & Lambda
Java8 & Lambda기현 황
 
Java 8 api :: lambda 이용하기
Java 8 api :: lambda 이용하기Java 8 api :: lambda 이용하기
Java 8 api :: lambda 이용하기rupert kim
 
Javascript 완벽 가이드 정리
Javascript 완벽 가이드 정리Javascript 완벽 가이드 정리
Javascript 완벽 가이드 정리ETRIBE_STG
 
자바스크립트 기초문법~함수기초
자바스크립트 기초문법~함수기초자바스크립트 기초문법~함수기초
자바스크립트 기초문법~함수기초진수 정
 
Javascript 교육자료 pdf
Javascript 교육자료 pdfJavascript 교육자료 pdf
Javascript 교육자료 pdfHyosang Hong
 
일단 시작하는 코틀린
일단 시작하는 코틀린일단 시작하는 코틀린
일단 시작하는 코틀린Park JoongSoo
 
[아꿈사] The C++ Programming Language 11장 연산자 오버로딩
[아꿈사] The C++ Programming Language 11장 연산자 오버로딩[아꿈사] The C++ Programming Language 11장 연산자 오버로딩
[아꿈사] The C++ Programming Language 11장 연산자 오버로딩해강
 
자바8 스트림 API 소개
자바8 스트림 API 소개자바8 스트림 API 소개
자바8 스트림 API 소개beom kyun choi
 
[새차원, 코틀린(Kotlin) 강좌] 5. Control Flow
[새차원, 코틀린(Kotlin) 강좌] 5. Control Flow[새차원, 코틀린(Kotlin) 강좌] 5. Control Flow
[새차원, 코틀린(Kotlin) 강좌] 5. Control Flow정연 최
 
스위프트, 코틀린과 모던언어의 특징 (Swift, Kotlin and Modern Languages)
스위프트, 코틀린과 모던언어의 특징 (Swift, Kotlin and Modern Languages)스위프트, 코틀린과 모던언어의 특징 (Swift, Kotlin and Modern Languages)
스위프트, 코틀린과 모던언어의 특징 (Swift, Kotlin and Modern Languages)Yongha Yoo
 
스위프트 성능 이해하기
스위프트 성능 이해하기스위프트 성능 이해하기
스위프트 성능 이해하기Yongha Yoo
 
Start IoT with JavaScript - 1.기초
Start IoT with JavaScript - 1.기초Start IoT with JavaScript - 1.기초
Start IoT with JavaScript - 1.기초Park Jonggun
 

Mais procurados (20)

Java8 람다
Java8 람다Java8 람다
Java8 람다
 
JDK 변천사
JDK 변천사JDK 변천사
JDK 변천사
 
자바 8 학습
자바 8 학습자바 8 학습
자바 8 학습
 
자바스크립트 함수
자바스크립트 함수자바스크립트 함수
자바스크립트 함수
 
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
 
Java8 & Lambda
Java8 & LambdaJava8 & Lambda
Java8 & Lambda
 
Java 8 api :: lambda 이용하기
Java 8 api :: lambda 이용하기Java 8 api :: lambda 이용하기
Java 8 api :: lambda 이용하기
 
Javascript 완벽 가이드 정리
Javascript 완벽 가이드 정리Javascript 완벽 가이드 정리
Javascript 완벽 가이드 정리
 
자바스크립트 기초문법~함수기초
자바스크립트 기초문법~함수기초자바스크립트 기초문법~함수기초
자바스크립트 기초문법~함수기초
 
Javascript 교육자료 pdf
Javascript 교육자료 pdfJavascript 교육자료 pdf
Javascript 교육자료 pdf
 
일단 시작하는 코틀린
일단 시작하는 코틀린일단 시작하는 코틀린
일단 시작하는 코틀린
 
[아꿈사] The C++ Programming Language 11장 연산자 오버로딩
[아꿈사] The C++ Programming Language 11장 연산자 오버로딩[아꿈사] The C++ Programming Language 11장 연산자 오버로딩
[아꿈사] The C++ Programming Language 11장 연산자 오버로딩
 
자바8 스트림 API 소개
자바8 스트림 API 소개자바8 스트림 API 소개
자바8 스트림 API 소개
 
[새차원, 코틀린(Kotlin) 강좌] 5. Control Flow
[새차원, 코틀린(Kotlin) 강좌] 5. Control Flow[새차원, 코틀린(Kotlin) 강좌] 5. Control Flow
[새차원, 코틀린(Kotlin) 강좌] 5. Control Flow
 
스위프트, 코틀린과 모던언어의 특징 (Swift, Kotlin and Modern Languages)
스위프트, 코틀린과 모던언어의 특징 (Swift, Kotlin and Modern Languages)스위프트, 코틀린과 모던언어의 특징 (Swift, Kotlin and Modern Languages)
스위프트, 코틀린과 모던언어의 특징 (Swift, Kotlin and Modern Languages)
 
스위프트 성능 이해하기
스위프트 성능 이해하기스위프트 성능 이해하기
스위프트 성능 이해하기
 
Java lambda
Java lambdaJava lambda
Java lambda
 
Start IoT with JavaScript - 1.기초
Start IoT with JavaScript - 1.기초Start IoT with JavaScript - 1.기초
Start IoT with JavaScript - 1.기초
 
Linq
LinqLinq
Linq
 
5 swift 기초함수
5 swift 기초함수5 swift 기초함수
5 swift 기초함수
 

Semelhante a (망작)이것이 자바다 Chap.16 스트림&병렬처리 Stream&parallel processing(java)

SpringCamp 2013 : About Jdk8
SpringCamp 2013 : About Jdk8SpringCamp 2013 : About Jdk8
SpringCamp 2013 : About Jdk8Sangmin Lee
 
Java advancd ed10
Java advancd ed10Java advancd ed10
Java advancd ed10hungrok
 
Java mentoring of samsung scsc 2
Java mentoring of samsung scsc   2Java mentoring of samsung scsc   2
Java mentoring of samsung scsc 2도현 김
 
스트림Api 스터디 3일
스트림Api 스터디   3일스트림Api 스터디   3일
스트림Api 스터디 3일ByungSun Park
 
2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 나의 첫번째 자바8 람다식 (정대원)
2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 나의 첫번째 자바8 람다식 (정대원)2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 나의 첫번째 자바8 람다식 (정대원)
2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 나의 첫번째 자바8 람다식 (정대원)JiandSon
 
2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 자바8 람다 나머지 이야기 (박성철)
2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 자바8 람다 나머지 이야기 (박성철)2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 자바8 람다 나머지 이야기 (박성철)
2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 자바8 람다 나머지 이야기 (박성철)JiandSon
 
R 프로그램의 이해와 활용 v1.1
R 프로그램의 이해와 활용 v1.1R 프로그램의 이해와 활용 v1.1
R 프로그램의 이해와 활용 v1.1happychallenge
 
2시간만에 자바 데이터처리를 쉽게 배우고 싶어요.
2시간만에  자바 데이터처리를 쉽게 배우고 싶어요.2시간만에  자바 데이터처리를 쉽게 배우고 싶어요.
2시간만에 자바 데이터처리를 쉽게 배우고 싶어요.Kenu, GwangNam Heo
 
Data Mining with R CH1 요약
Data Mining with R CH1 요약Data Mining with R CH1 요약
Data Mining with R CH1 요약Sung Yub Kim
 
R 스터디 첫번째
R 스터디 첫번째R 스터디 첫번째
R 스터디 첫번째Jaeseok Park
 
[SOPT] 데이터 구조 및 알고리즘 스터디 - #02 : 스택, 큐, 수식 연산
[SOPT] 데이터 구조 및 알고리즘 스터디 - #02 : 스택, 큐, 수식 연산[SOPT] 데이터 구조 및 알고리즘 스터디 - #02 : 스택, 큐, 수식 연산
[SOPT] 데이터 구조 및 알고리즘 스터디 - #02 : 스택, 큐, 수식 연산S.O.P.T - Shout Our Passion Together
 
파이썬 데이터과학 레벨2 - 데이터 시각화와 실전 데이터분석, 그리고 머신러닝 입문 (2020년 이태영)
파이썬 데이터과학 레벨2 - 데이터 시각화와 실전 데이터분석, 그리고 머신러닝 입문 (2020년 이태영)파이썬 데이터과학 레벨2 - 데이터 시각화와 실전 데이터분석, 그리고 머신러닝 입문 (2020년 이태영)
파이썬 데이터과학 레벨2 - 데이터 시각화와 실전 데이터분석, 그리고 머신러닝 입문 (2020년 이태영)Tae Young Lee
 
[SOPT] 데이터 구조 및 알고리즘 스터디 - #01 : 개요, 점근적 복잡도, 배열, 연결리스트
[SOPT] 데이터 구조 및 알고리즘 스터디 - #01 : 개요, 점근적 복잡도, 배열, 연결리스트[SOPT] 데이터 구조 및 알고리즘 스터디 - #01 : 개요, 점근적 복잡도, 배열, 연결리스트
[SOPT] 데이터 구조 및 알고리즘 스터디 - #01 : 개요, 점근적 복잡도, 배열, 연결리스트S.O.P.T - Shout Our Passion Together
 

Semelhante a (망작)이것이 자바다 Chap.16 스트림&병렬처리 Stream&parallel processing(java) (20)

Java stream v0.1
Java stream v0.1Java stream v0.1
Java stream v0.1
 
Java stream v0.1
Java stream v0.1Java stream v0.1
Java stream v0.1
 
SpringCamp 2013 : About Jdk8
SpringCamp 2013 : About Jdk8SpringCamp 2013 : About Jdk8
SpringCamp 2013 : About Jdk8
 
Java advancd ed10
Java advancd ed10Java advancd ed10
Java advancd ed10
 
Java mentoring of samsung scsc 2
Java mentoring of samsung scsc   2Java mentoring of samsung scsc   2
Java mentoring of samsung scsc 2
 
Java(4/4)
Java(4/4)Java(4/4)
Java(4/4)
 
스트림Api 스터디 3일
스트림Api 스터디   3일스트림Api 스터디   3일
스트림Api 스터디 3일
 
2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 나의 첫번째 자바8 람다식 (정대원)
2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 나의 첫번째 자바8 람다식 (정대원)2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 나의 첫번째 자바8 람다식 (정대원)
2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 나의 첫번째 자바8 람다식 (정대원)
 
2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 자바8 람다 나머지 이야기 (박성철)
2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 자바8 람다 나머지 이야기 (박성철)2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 자바8 람다 나머지 이야기 (박성철)
2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 자바8 람다 나머지 이야기 (박성철)
 
R intro
R introR intro
R intro
 
R 프로그램의 이해와 활용 v1.1
R 프로그램의 이해와 활용 v1.1R 프로그램의 이해와 활용 v1.1
R 프로그램의 이해와 활용 v1.1
 
2시간만에 자바 데이터처리를 쉽게 배우고 싶어요.
2시간만에  자바 데이터처리를 쉽게 배우고 싶어요.2시간만에  자바 데이터처리를 쉽게 배우고 싶어요.
2시간만에 자바 데이터처리를 쉽게 배우고 싶어요.
 
Data Mining with R CH1 요약
Data Mining with R CH1 요약Data Mining with R CH1 요약
Data Mining with R CH1 요약
 
R 스터디 첫번째
R 스터디 첫번째R 스터디 첫번째
R 스터디 첫번째
 
[SOPT] 데이터 구조 및 알고리즘 스터디 - #02 : 스택, 큐, 수식 연산
[SOPT] 데이터 구조 및 알고리즘 스터디 - #02 : 스택, 큐, 수식 연산[SOPT] 데이터 구조 및 알고리즘 스터디 - #02 : 스택, 큐, 수식 연산
[SOPT] 데이터 구조 및 알고리즘 스터디 - #02 : 스택, 큐, 수식 연산
 
파이썬 데이터과학 레벨2 - 데이터 시각화와 실전 데이터분석, 그리고 머신러닝 입문 (2020년 이태영)
파이썬 데이터과학 레벨2 - 데이터 시각화와 실전 데이터분석, 그리고 머신러닝 입문 (2020년 이태영)파이썬 데이터과학 레벨2 - 데이터 시각화와 실전 데이터분석, 그리고 머신러닝 입문 (2020년 이태영)
파이썬 데이터과학 레벨2 - 데이터 시각화와 실전 데이터분석, 그리고 머신러닝 입문 (2020년 이태영)
 
4. stack
4. stack4. stack
4. stack
 
[SOPT] 데이터 구조 및 알고리즘 스터디 - #01 : 개요, 점근적 복잡도, 배열, 연결리스트
[SOPT] 데이터 구조 및 알고리즘 스터디 - #01 : 개요, 점근적 복잡도, 배열, 연결리스트[SOPT] 데이터 구조 및 알고리즘 스터디 - #01 : 개요, 점근적 복잡도, 배열, 연결리스트
[SOPT] 데이터 구조 및 알고리즘 스터디 - #01 : 개요, 점근적 복잡도, 배열, 연결리스트
 
함수적 사고 2장
함수적 사고 2장함수적 사고 2장
함수적 사고 2장
 
강의자료3
강의자료3강의자료3
강의자료3
 

(망작)이것이 자바다 Chap.16 스트림&병렬처리 Stream&parallel processing(java)

  • 1. 스트림(Stream) 1.2 스트림 특징 (2) 내부 반복자를 사용하므로 병렬 처리가 쉽다는 점
  • 2. 스트림(Stream) 1.2 스트림 특징 (2) 내부 반복자를 사용하므로 병렬 처리가 쉽다는 점
  • 3. 스트림(Stream) 2.1 컬렉션으로부터 스트림 얻기 public class FromCollectionExam { public static void main(String[] args) { List<Student> list = Arrays.asList(new Student("Jackie", 40), new Student("Hwang", 71), Stream<Student> stream = list.stream(); stream.forEach(s -> System.out.println(s.getName())); } }
  • 4. 스트림(Stream) 2.2 배열으로부터 스트림 얻기 public class FromArrayExam { public static void main(String[] args) { String[] strArr = { "Kim", "Lee", "Park" }; Stream<String> strStream = Arrays.stream(strArr); strStream.forEach(s -> System.out.print(s + ",")); System.out.println(); int[] intArr = { 10, 20, 30, 40, 50 }; IntStream intStream = Arrays.stream(intArr); intStream.forEach(i -> System.out.print(i + ", ")); } }
  • 5. 스트림(Stream) 2.3 숫자범위로부터 스트림 얻기 public class FromIntRangeExam { public static int sum; public static void main(String[] args) { IntStream stream = IntStream.rangeClosed(1, 100); stream.forEach(a -> sum += a); System.out.println("1 ~ 100 총합: " + sum); } }
  • 6. 스트림(Stream) 2.5 디렉토리으로부터 스트림 얻기 public class FromDirectoryExam { public static void main(String[] args) throws IOException { Path path = Paths.get("C:/Users/zhfld/workspace/ExampleJava/src/stream"); Stream<Path> stream = Files.list(path); stream.forEach(p -> System.out.println(p.getFileName())); } }
  • 7. 스트림(Stream) 3.1 중간처리와 최종처리 - 스트림은 데이터의 필터링, 매핑, 정렬, 그룹핑 등의 중간 처리와 합계, 평균, 카운팅, 최대값, 최소값 등의 최종 처리를 파이프라인(pipelines) 으로 해결합니다. 파이프 라인은 여러 개의 스트림이 연결되어 있는 구 조를 말합니다. 파이프라인에서 최종 처리를 제외하고는 모두 중간 처 리 스트림입니다. - 중간 스트림이 생성될 때 요소들이 바로 중간 처리(필터링, 매핑, 정렬) 되는 것이 아니라 최종 처리가 시작되기 전까지 중간 처리는 지연(lazy) 됩니다. - 최종 처리가 시작되면 비로소 컬렉션의 요소가 하나씩 중간 스트림에 서 처리되고 최종 처리까지 오게 됩니다.
  • 9. 스트림(Stream) 4. 필터링(distinct(), filter()) - 필터링은 중간 처리 기능으로 요소를 걸러내는 역할을 합니다. 필터링 메소드인 distinct()와 filter() 메소드는 모든 스트림이 가지고 있 는 공통 메소드 입니다. - distinct() 메소드는 중복을 제거하는 데, Stream의 경우 Object.equals(Object) 가 true 이면 동일한 객체로 판단하고 중복을 제 거합니다. - IntStream, LongStream, DoubleStream은 동일값일 경우 중복을 제거 합니다.
  • 10. 스트림(Stream) 5. 매핑(flatMapXXX(), mapXXX(), asXXXStream(), boxed()) - 매핑(mapping)은 중간 처리 기능으로 스트림의 요소를 다른 요소로 대체하는 작업을 말합니다. - 스트림에서 제공하는 매핑 메소드는 flatXXX()와 mapXXX(), 그리 고 asDoubleStream, asLongStream, boxed 가 있습니다.
  • 12. 스트림(Stream) 6. 정렬(sorted()) public class SortingExam { public static void main(String[] args) { IntStream intStream = Arrays.stream(new int[] {9, 6, 11, 2, 3}); intStream .sorted() .forEach(n -> System.out.print(n + ", ")); System.out.println(); List<Student> studentList = Arrays.asList( new Student("Jack", 80), new Student("John", 100), new Student("Andy", 99), new Student("Jolie", 70) ); studentList.stream() .sorted() .forEach(s -> System.out.print(s.getScore() + ", ")); System.out.println(); studentList.stream() .sorted( Comparator.reverseOrder()) .forEach(s -> System.out.print(s.getScore() + ", ")); } }
  • 13. 스트림(Stream) 7. 루핑(peek(), forEach()) - 루핑(looping)은 요소 전체를 반복하는 것을 말합니다. - peek() 는 중간 처리 메소드이고, forEach()는 최종 처리 메소드 입니 다. public class LoopingExam { public static void main(String[] args) { int[] intArr = {5, 4, 3, 2, 1}; System.out.println("[peek()를 마지막에 호출한 경우]"); Arrays.stream(intArr) .filter(a -> a % 2 == 0) .peek(n -> System.out.println(n)); // 동작하지 않음 System.out.println("[최종 처리 메소드를 마지막에 호출한 경우]"); int total = Arrays.stream(intArr) .filter(a -> a % 2 == 0) .peek(n -> System.out.println(n)) // 동작함 .sum(); System.out.println("총합: " + total); System.out.println("[forEach를 마지막에 호출한 경우]"); Arrays.stream(intArr) .filter(a -> a % 2 == 0) .forEach(n -> System.out.println(n)); // 최종 메소드로 동작함 }
  • 14. 스트림(Stream) 8. 매칭(allMatch(), anyMatch(), noneMatch()) - allMatch() 메소드는 모든 요소들이 파라미터로 주어진 Predicate의 조건을 만족하는지 조사하고, anyMatch() 메소드는 최소한 한 개의 요소가 파라미터로 주어진 Predicate의 조건을 만족하는지 조사합니다. 그리고 noneMatch()는 모든 요소들이 파라미터로 주어진 Predicate의 조건을 만족하지 않는지 조사합 니다.
  • 15. 스트림(Stream) 9. 기본 집계(sum(), count(), average(), max(), min()) public class AggregateExam { public static void main(String[] args) { int[] intArr = {5, 8, 11, 13, 19, 20, 24}; long count = Arrays.stream(intArr) .filter( n -> n % 2 == 0) .count(); System.out.println("2의 배수 개수: " + count); long sum = Arrays.stream(intArr) .filter( n -> n % 2 == 0) .sum(); System.out.println("2의 배수의 합: " + sum); double avg = Arrays.stream(intArr) .average() .getAsDouble(); System.out.println("배열의 평균; " + avg); int third = Arrays.stream(intArr) .filter(n -> n % 3 == 0) .findFirst() .getAsInt(); System.out.println("3의 배수: " + third); } }
  • 16. 스트림(Stream) 10. 커스텀 집계(reduce()) - 스트림은 기본 집계 메소드인 sum(), average(), count(), max(), min()을 제공하지만, 프로그램화해서 다양한 집계 결과물을 만들 수 있도록 reduce() 메소드를 제공합니다.
  • 17. 스트림(Stream) 11. 수집(collect()) - 스트림은 요소들을 필터링 또는 매핑한 후 요소들을 수집하는 최 종 처리 메소드인 collect()를 제공하고 있습니다. - 이 메소드를 이용하면 필요한 요소만 켈렉션으로 담을 수 있고, 요소들을 그룹핑 한 후 집계(리덕션) 할 수 있습니다.
  • 18. 스트림(Stream) 12. 병렬 처리 - 병렬 처리(Parallel Operation)란 멀티 코어 CPU 환경에서 하나의 작업 을 분할해서 각각의 코어가 병렬적으로 처리하는 것을 말하는 데, 병렬처 리의 목적은 작업 처리 시간을 줄이기 위한 것입니다. - 자바 8부터 요소를 병렬 처리할 수 있도록 하기 위해 병렬 스트림을 제공 하기 때문에 컬렉션(배열)의 전체 요소 처리 시간을 줄여 줍니다. 12.1 동시성(Concurrency)과 병렬성(Parallelism) 12.2 포크조인(ForkJoin) 프레임워크 12.3 병렬 스트림 생성 12.4 병렬 처리 기능