스트림(Stream)의 이해
• 정화 파이프 A형 24종의 유기 화합물을 걸러낸다.
• 정화 파이프 C형 일반 세균과 대장균 그리고 입자상의 불순물을 제거한다.
• 플랑크 파이프 물고기가 살도록 적정량의 플랑크톤을 공급하는 파이프이다.
정화 파이프 A형 ⇨ 정화 파이프 C형 ⇨ 플랑크 파이프
정화 파이프 C형 ⇨ 정화 파이프 A형 ⇨ 플랑크 파이프
중간 파이프(중간 연산) 최종 파이프(최종 연산)
스트림을 생성하고 이를 대상으로 ‘중간 연산’과 ‘최종 연산’을 진행하면, 원하는 기준으로 데이터를 필
터링하고 필터링 된 데이터의 가공된 결과를 얻을 수 있다. 그것도 매우 적은 양의 코드로 말이다.
스트림의 첫 번째 예제와 이해
public static void main(String[] args) {
int[] ar = {1, 2, 3, 4, 5};
IntStream stm1 = Arrays.stream(ar); // 배열 ar로부터 스트림 생성
IntStream stm2 = stm1.filter(n -> n%2 == 1); // 중간 연산 진행
int sum = stm2.sum(); // 최종 연산 진행
System.out.println(sum);
}
최종 연산 생략하면 아무 결과도 얻지 못한다.
public static void main(String[] args) {
int[] ar = {1, 2, 3, 4, 5};
int sum = Arrays.stream(ar) // 스트림 생성,
.filter(n -> n%2 == 1) // filter 통과,
.sum(); // sum 통과 결과 반환
System.out.println(sum);
}
9
본서에서 스트림을 설명하는 방향
스트림 관련 전체 내용의 구분
• 스트림의 생성 방법
• 중간 연산의 종류와 내용
• 최종 연산의 종류와 내용
이중 일부에 해당하는 다음 내용들만 이번 Chapter에서 설명 나머진 다음 Chapter에서 설명
• 스트림의 생성 방법
배열 및 컬렉션 인스턴스 대상으로 스트림을 생성하는 방법
• 중간 연산의 종류와 내용
필터링(Filtering) 및 맵핑(Mapping) 관련 연산
• 최종 연산의 종류와 내용
리덕션(Reduction) 관련 연산
스트림 생성하기 : 배열
void forEach(Consumer<? super T> action)
// Consumer<T> void accept(T t)
배열 대상 스트림 생성 대표 메소드
public static <T> Stream<T> stream(T[] array) // Arrays 클래스에 정의
public static void main(String[] args) {
String[] names = {"YOON", "LEE", "PARK"};
Stream<String> stm = Arrays.stream(names); // 스트림 생성
stm.forEach(s -> System.out.println(s)); // 최종 연산 진행
}
실제로는 이러한 스타일로 코딩
public static void main(String[] args) {
String[] names = {"YOON", "LEE", "PARK"};
Arrays.stream(names)
.forEach(s -> System.out.println(s));
}
YOON
LEE
PARK
스트림 생성하기: 배열 대상 다양한 메소드들
public static IntStream stream(int[] array)
public static IntStream stream(int[] array, int startInclusive, int endExclusive)
public static DoubleStream stream(double[] array)
public static DoubleStream stream(double[] array, int startInclusive, int endExclusive)
public static LongStream stream(double[] array)
public static LongStream stream(double[] array, int startInclusive, int endExclusive)
Arrays 클래스에 정의된 메소드들
public static void main(String[] args) {
double[] ds = {1.1, 2.2, 3.3, 4.4, 5.5};
Arrays.stream(ds)
.forEach(d -> System.out.print(d + "\t"));
System.out.println();
Arrays.stream(ds, 1, 4) // 인덱스 1부터 인덱스 4 이전까지
.forEach(d -> System.out.print(d + "\t"));
System.out.println();
}
1.1 2.2 3.3 4.4 5.5
2.2 3.3 4.4
스트림 생성하기: 컬렉션 인스턴스
컬렉션 인스턴스를 대상으로 스트림 생성 시 호출하는 메소드
default Stream<E> stream()
// java.util.Collection<E>의 디폴트 메소드
public static void main(String[] args) {
List<String> list = Arrays.asList("Toy", "Robot", "Box");
list.stream()
.forEach(s -> System.out.print(s + "\t"));
System.out.println();
}
Toy Robot Box
'# 02 > Java' 카테고리의 다른 글
[윤성우 열혈자바] 29-3. 리덕션, 병렬 스트림 (0) | 2019.10.28 |
---|---|
[윤성우 열혈자바] 29-2. 필터링과 맵핑 (0) | 2019.10.28 |
[윤성우 열혈자바] 28-3. OptionalInt, OptionalLong, OptionalDouble 클래스 (0) | 2019.10.28 |
[윤성우 열혈자바] 28-2. Optional 클래스 (0) | 2019.10.28 |
[윤성우 열혈자바] 28-1. 메소드 참조 (0) | 2019.10.28 |