리덕션(Reduction)
📌 리덕션(Reduction)
: 데이터를 축소하는 연산.
💡 BinaryOperator<T>의 추상 메소드 : T apply(T t1, T t2)
T reduce(T identity, BinaryOperator<T> accumulator)
📌 stream이 빈 경우, reduce 메소드의 첫 번째 인자 반환.
📌 stream이 비어 있지 않은 경우, reduce 메소드의 첫 번째 인자를 스트림의 첫 번째 데이터로 간주함.
📄 StreamReduceTest.java
package reduction;
import java.util.Arrays;
import java.util.List;
import java.util.function.BinaryOperator;
public class StreamReduceTest {
public static void main(String[] args) {
List<String> li = Arrays.asList("apple", "banana", "blueberry", "pear", "watermelon");
BinaryOperator<String> lc = (s1, s2) -> { // 문자열 길이 비교.
if(s1.length() > s2.length()) {
return s1;
}
else {
return s2;
}
};
String s = li.stream()
.reduce("", lc);
System.out.println(s); // watermelon
}
}
병렬 스트림(Parallel Streams)
📌 병렬 스트림(Parallel Streams)
: 하나의 작업을 둘 이상의 작업으로 나눠 동시에 진행하는 것.
📄 StreamParallelTest.java
package reduction;
import java.util.Arrays;
import java.util.List;
import java.util.function.BinaryOperator;
public class StreamParallelTest {
public static void main(String[] args) {
List<String> li = Arrays.asList("apple", "banana", "blueberry", "pear", "watermelon");
BinaryOperator<String> lc = (s1, s2) -> { // 문자열 길이 비교.
if(s1.length() > s2.length()) {
return s1;
}
else {
return s2;
}
};
String s = li.parallelStream() // 병렬 스트림.
.reduce("", lc);
System.out.println(s); // watermelon
}
}
📌 이미 생성된 스트림을 병렬 스트림으로 변경 가능.
DoubleStream parallel()
IntStream parallel()
LongStream parallel()
📄 ToParallelStreamTest.java
package stream2;
import java.util.Arrays;
import java.util.List;
import java.util.function.BinaryOperator;
import java.util.stream.Stream;
public class ToParallelStreamTest {
public static void main(String[] args) {
List<String> li = Arrays.asList("apple", "banana", "blueberry", "pear", "watermelon");
Stream<String> ss = li.stream(); // 스트림 생성.
BinaryOperator<String> lc = (s1, s2) -> { // 문자열 길이 비교.
if(s1.length() > s2.length()) {
return s1;
}
else {
return s2;
}
};
String s = ss.parallel() // 병렬 스트림으로 변경.
.reduce("", lc);
System.out.println(s); // watermelon
}
}
'Java > Java' 카테고리의 다른 글
[Java] 최종 연산 (0) | 2022.10.21 |
---|---|
[Java] 중간 연산 - 정렬과 루핑(Looping) (0) | 2022.10.21 |
[Java] 중간 연산 - 필터링(Filtering)과 맵핑(Mapping) (0) | 2022.10.21 |
[Java] 스트림 (0) | 2022.10.21 |
[Java] 함수형 인터페이스(Functional Interfaces) (0) | 2022.10.20 |
댓글