티스토리 뷰
목차
1. 리덕션
2. 병렬 스트림
1. 리덕션
스트림을 통해 들어가는 처음 두 개의 데이터에 대한 연산 결과와 다음 데이터를 연산하는 방식으로 최종 한 개의 결과값을 만들어내는 데이터 축소 연산.
T reduce(T identity, BinaryOperator<T> accumulator);
public interface BinaryOperator<T> extends BiFunction<T,T,T> {
// T apply(T t1, T t2)
}
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);
System.out.println(str); // Complex
두 개의 String 형 인자를 받아 문자열의 길이가 긴 데이터를 리턴하는 BinaryOperator 를 만들어
reduce() 메소드의 두 번째 인자로 전달한다.
reduce() 연산의 결과 값으로 문자열의 길이가 가장 긴 Complex 가 반환된다.
reduce() 메소드의 첫 번째 인자 T identity
identity 로 전달되는 값은 reduce()의 첫번째 연산에 사용된다.
위의 코드에서 reduce("1234567", lc) 와 같이 인자를 전달하면 스트림을 통해 전달되는 값은
"1234567", "Box", "Simple", "Complex", "Robot" 이고 연산의 최종 결과 값으로 문자열의 길이가 가장 긴 "1234567" 가 반환된다.
Optional<T> reduce(BinaryOperator<T> accumulator);
identity 없이 BinaryOperator만 전달받아 reduce() 연산을 할 수도 있다.
positives.stream().reduce(Positive::add).get().getNumber();
public Positive add(Positive positive) {
return new Positive(this.number + positive.number);
}
2. 병렬 스트림
병렬 처리: 한 개의 작업을 여러개의 core 가 진행하도록 한다.
규모가 큰 작업에는 유용하지만 단순한 작업을 병렬 처리하면 작업을 여러개로 나누고 합치는 작업이 오히려 더 많은 시간을 소요할 수 있다.
parallelStream() 메소드를 사용해서 간단하게 병렬 처리 연산 작업을 할 수 있다.
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.parallelStream()
.reduce("", lc);
System.out.println(str);
일반 스트림의 parallel() 메소드를 호출해서 일반 스트림을 병렬 스트림으로 변경할 수도 있다.
String str = ss.parallel()
.reduce("", lc);
출처
https://cafe.naver.com/cstudyjava 윤성우의 열혈 java
'Java > Java 8' 카테고리의 다른 글
[java 8] 3-1. Stream (생성, 중간 연산, 최종 연산) (0) | 2021.12.29 |
---|---|
[java 8] 4. Optional (0) | 2021.12.18 |
[java 8] 3. Stream (0) | 2021.12.17 |
[java 8] 1-1. 함수형 인터페이스와 람다 (메소드 참조) (0) | 2021.12.17 |
[java 8] 2. 인터페이스의 변화 (0) | 2021.12.02 |
- Total
- Today
- Yesterday
- Ubiquitous Language
- 육각형 아키텍처
- mockito
- Stream
- 이벤트 스토밍
- spring rest docs
- java8
- 계층형 아키텍처
- 폴링 발행기 패턴
- ATDD
- http
- MySQL
- H2
- TDD
- 스프링 예외 추상화
- 트랜잭셔널 아웃박스 패턴
- Spring
- clean code
- Spring Data JPA
- 클린코드
- 스프링 카프카 컨슈머
- kafka
- 학습 테스트
- JPA
- HTTP 헤더
- 도메인 모델링
- Git
- named query
- 마이크로서비스 패턴
- Spring Boot
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |