리덕션(Reduction) 데이터를 축소하는 연산 입니다.
T reduce(T identity, BinaryOperator<T> accumulator) // Stream<T>에 존재합니다.
// BinaryOperator<T> T apply(T t1, T t2)
리덕션은 두 개의 인수를 받은 후에 그에 따른 결과를 반환합니다.
그 연산식은 마치 토너먼트처럼 보이는데요.
앞의 값과 비교를 한 후에 축소 진행 중인 상태의 하나의 요소 결과값을 반환합니다.
public static void main(String[] args) {
List<String> ls = Arrays.asList("Box", "Simple", "Complex", "Robot");
BinaryOperator<String> lc = (s1, s2) -> {
if(s1.length() > s2.length())
return s1;
else
return s2;
};
String str = ls.stream()
.reduce("", lc); // 스트림 빈 경우 "" 반환 // 1. 스트림이 비어있을 때 반환하는 역할
2. data 1, 2, 3, 4 의 맨 앞에 추가되는 데이터
System.out.println(str);
}
reduce 의 역할은 다음과 같습니다.
A | B | C | D |
이렇게 알파벳 네 개의 데이터가 있는 배열이 있을 때
reduce('E', ___) -> 의 경우 맨 앞에 있는 자료인 E가 배열의 앞에 자리하게 됩니다.
package day21;
import java.util.*;
import java.util.function.*;
public class Reduce01 {
public static void main(String[] args) {
List<String> lst = Arrays.asList("oh","good","bad","happy");
// 1. 스트림이 비어 있을 때의 최종 대체제 역할
// 2. 스트림의 맨 앞에 추가된 또 하나의 멤버 역할
String result = lst.stream().reduce("very nice", (s1, s2)->{
if(s1.length() > s2.length()) {return s1;}
else {return s2;}
});
System.out.println(result);
}
}
map : 스트림의 개별 요소에 대해 순서대로 어떤 작업을 수행한 후에, 작업 결과물을 반환한다.
반환된 자료들은 다시 하나의 스트림을 형성하게 된다.
flatMap : 스트림의 개별 요소에 대해 순서대로 어떤 작업을 수행한 후에, 작업 결과물을 스트림으로 반환한다.
반환된 스트림들은 다시 이어져서 하나의 스트림을형성하게 된다.
package day21;
import java.util.Arrays;
import java.util.stream.Stream;
public class FlatMap {
public static void main(String[] args) {
Stream<String> ss1 = Stream.of("나의 인생","너의 삶");
Stream<String> ss2 = ss1.flatMap(s -> Arrays.stream(s.split(" ")));
ss2.forEach(s -> System.out.print(s + "\t"));
System.out.println();
}
}
'자바 > 자바 입문 공부일지' 카테고리의 다른 글
자바 기초 공부 일지 53. I/O 스트림(InputStream, OutputStream) (작성중) (0) | 2022.11.08 |
---|---|
자바 기초 공부 일지 52. 버퍼 (작성 수정중) (0) | 2022.11.08 |
자바 기초 공부 일지 50. 스트림Stream, 필터링과 맵핑 (0) | 2022.11.07 |
자바 기초 공부 일지 49. 메소드 참조 (작성 수정중) (0) | 2022.11.07 |
자바 기초 공부 일지 48. 함수형 인터페이스 Predicate<T>, Supplier<T>, Consumer<T>, Function<T, R> (2) | 2022.11.04 |