728x90
집계 연산자
- count
- distinct
- reduce
- groupby
count
count: 송출되는 요소를 합쳐서 단일 값으로 전달하는게 count 입니다.
그림과 같이 4개의 요소가 전달되었을때 요소의 총 갯수인 4를 리턴합니다.
TestCode
public class Operator3 {
// count
public Mono<Long> fluxCount(){
return Flux.range(1, 10).count().log();
}
}
class Operator3Test {
private Operator3 operator3 = new Operator3();
@Test
void fluxCount() {
StepVerifier.create(operator3.fluxCount())
.expectNext(10L)
.verifyComplete();
}
}
distinct
distinct: 중복값을 찾아서 없애주는 연산자입니다.
그림에서와 같이 여러 요소들이 전달될때, 녹색 동그라미의 경우 이미 전달되었기 때문에 전달되지 않습니다.
식별정보는 HashSet을 사용합니다.
TestCode
public class Operator3 {
// distinct
public Flux<String> fluxDistinct(){
return Flux.fromIterable(List.of("a","b","a","b","c"))
.distinct()
.log();
}
}
class Operator3Test {
private Operator3 operator3 = new Operator3();
@Test
void fluxDistinct() {
StepVerifier.create(operator3.fluxDistinct())
.expectNext("a","b","c")
.verifyComplete();
}
}
reduce
reduce: 연속되는 숫자가 있다면 앞의 요소와 결합하여 하나의 값으로 계산하는 연산자 입니다.
스트림에서 모든 요소의 합을 계산할때 용이합니다.
TestCode
public class Operator3 {
// reduce
public Mono<Integer> fluxReduce(){
return Flux.range(1,10)
.reduce((i,j) -> i + j)
.log();
}
}
class Operator3Test {
private Operator3 operator3 = new Operator3();
@Test
void fluxReduce() {
StepVerifier.create(operator3.fluxReduce())
.expectNext(55)
.verifyComplete();
}
}
groupby
groupby: 동일한 값 또는 특정값에 대해서 묶어서 처리할 수 있게 해주는 연산자입니다.
TestCode
public class Operator3 {
// groupby
public Flux<Integer> fluxGroupBy(){
return Flux.range(1,10)
.groupBy(i -> (i % 2 == 0) ? "even" : "odd")
.flatMap(group -> group.reduce((i,j) -> i+j))
.log();
}
}
class Operator3Test {
private Operator3 operator3 = new Operator3();
@Test
void fluxGroupBy() {
StepVerifier.create(operator3.fluxGroupBy())
.expectNext(30)
.expectNext(25)
.verifyComplete();
}
}
728x90
'SpringWebflux' 카테고리의 다른 글
[SpringWebflux] reactor operator - 4 (0) | 2024.03.08 |
---|---|
[Spring Webflux] CPU bound vs I/O Bound (1) | 2024.03.07 |
[SpringWebflux] Spring Webflux 소개 (0) | 2024.03.06 |
[Spring Webflux] 스프링 웹플럭스(MVC와 비교, 내부 동작 원리, Netty) (0) | 2024.01.31 |
[Netty] @Sharable 어노테이션과 ChannelHandler 인스턴스 관리 (0) | 2024.01.10 |