SpringWebflux
[SpringWebflux] Reactor operator - 3
jolocal
2024. 3. 8. 11:18
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