groupby 질문있습니다!
groupby 연산자를 사용하면..
db 쿼리 처럼 특정 컬럼기준으로 합계를 구한다던가.. 계산된 데이터를 확인하는 용도가 아닌거 같은데요..
groupby 를 사용해도 결국엔 filter 연산자를 사용해서 내가 원하는 데이터를 걸러내야 하는거 같은데요..
차라리 이러면 생성자로부터 통지받은 데이터를 애초부터 groupby 를 사용하지 않고 filter 연산자로만 걸러내는방식이랑 어떤점이 다를까요?
답변 5
1
아니에요. 부족하지만 저도 제가 아는걸 다른분들께 공유하면 보람도 되고, 더불어 저도 더 성장할 수 있고 또 아기 분유값도 벌 수 있어서 좋습니다. ^^;; 지상님도 개발자로써 멋진 인생 살아가시길 기원하겠습니다. 감사합니다!
0
현재 Spring Reactive Web Applications 강의를 준비하고 있는 중입니다. 1부는 Reactor 위주이구요. 2부는 WebFlux를 이용한 Reactive Web Application 을 만들어보는것입니다. 직장이랑 육아때문에 강의 제작할 수 있는 작업 시간이 많이 나지않아서 강의 하나 올리는데 기간이 꽤 걸리네요. ^^; 제 개인적인 바램으로는 겨울이 가기 전에 오픈할 수 있었으면 하는 바램이에요. RxJava 강의를 오픈할때부터 Spring 베이스의 Reactive Application을 염두에 두고 있었으니까 죄송하지만 조금만 기다려주시면 감사드릴게요. 충분한 답변이 되셨다고 하니 다행입니다. ^^
0
아 자세한 답변 너무나도 감사합니다! 다시 작성해주신 코드를 보니 groupby 를 사용하는 목적을 제대로 이해했네요!
혹시 추후 Spring 기반의 Mono Flux 를 다루는 API 서버 리액터 프로그래밍 강좌도 준비하실 계획없으세요?ㅎㅎ
저도 그렇고 다들 스프링 리액터 강좌를 기다리시는 분들이 많을거 같네요! ^^
0
말씀하신대로 사용한 두번째 예제 코드에서 filter 사용은 불필요한게 맞는것 같습니다.
단순히 쉬운 예를 보여드리려고 한 의도가 있었는데 groupBy()를 설명하기에는 적절하지 않은 예인것 같네요.
groupBy()는 말씀하신대로 그룹별로 묶어서 어떤 처리를 할 수 있는 Operator가 맞습니다.
그래서 groupBy() 사용에 좀 더 적절한 예제 코드를 추가로 올려두었습니다. github에 올려둔 소스 코드를 잠깐 설명 드리자면,
==== ObservableGroupByExample03 ===
/**
* 제조사를 그룹으로 묶어서 자동차 명을 출력하는 예제
*/
public class ObservableGroupByExample02 {
public static void main(String[] args) {
Observable<GroupedObservable<CarMaker, Car>> observable =
Observable.fromIterable(SampleData.carList)
.groupBy(Car::getCarMaker);
observable
.flatMapSingle(carGroup ->
carGroup.flatMap(car ->
Observable.just(car.getCarName()))
.toList()
)
.subscribe(System.out::println);
}
}
: 제조사별로 자동차 명만 출력하는 예제입니다. groupBy( ) 연산자는 Observable<GrouppedObserveble>을 반환을 하는데 이 GrouppedObservable을 flatMapSingle( ) 연산자를 이용해서 해당 그룹별로 통지되는 Car 객체 중에 CarName만 얻은 후,(CarName을 얻기 위해서 내부적으로 flatMap() 연산자를 한번 더 사용했음) toList()를 통해 Single로 CarName이 담긴 list를 통지하는데요. 출력 결과는 아래와 같습니다.
=====================================
[티볼리, G4렉스턴]
[SM6, SM5]
[말리부, 트래버스, 트랙스]
[쏘렌토, 팰리세이드]
그리고 추가적으로 네번째 예제 코드를 하나 더 추가했습니다.
==== ObservableGroupByExample04 ====
/**
* 제조사 별로 그룹으로 묶은 후, 제조사 별 차량 가격의 합계를 구하는 예제
*/
public class ObservableGroupByExample03 {
public static void main(String[] args) {
Observable<GroupedObservable<CarMaker, Car>> observable =
Observable.fromIterable(SampleData.carList)
.groupBy(car -> car.getCarMaker());
observable
.flatMapSingle(carGroup ->
Single.just(carGroup.getKey())
.zipWith(
carGroup.flatMap(car ->
Observable.just(car.getCarPrice()))
.reduce((p1, p2)-> p1 + p2)
.toSingle()
, (key, sum) -> key + ": " + sum
)
)
.subscribe(System.out::println);
}
}
: 제조사 별 차량 가격의 합계를 구하는 예제인데요. 위의 ObservableGroupByExample03 코드와 거의 같은데 다른점은 제조사 별 차량 가격의 합계를 구하기 위해 reduce( ) 연산자를 한번 더 사용했다는 거구요.
차량 가격 합계 앞에 제조사를 표시해주기 위해서 zipWith( ) 연산자를 추가적으로 사용을 했습니다.
출력 결과는 아래와 같습니다.
================================
CHEVROLET: 91000000
HYUNDAE: 61000000
SSANGYOUNG: 66000000
SAMSUNG: 75000000
지적해주신 부분은 다른 수강생 분들도 아셔야 될테니 제가 시간될 때 코드 설명과 함께 새소식 공지로 다시 올리도록 할께요.
좋은 지적 해주셔서 감사합니다. 다른 의견 있으시면 언제든지 문의 주세요
감사합니다.
Single과 관련해 여쭤보고 싶은 부분이 있습니다!
0
264
2
cold/hot publisher 예제 코드와 관련해 질문 드립니다.
0
363
1
CompletableObserver 클래스의 람다식 표현관련
0
297
1
1강에 예시로 보여주신 ToDoSample 코드에 관해 질문 드립니다!
0
356
1
데이터 결합 연산자 / merge 관련 질문
0
445
1
DROP 배압 전략에 관한 궁금증
0
300
2
map에서의 TimeUtil.sleep에 관한 궁금점
0
215
1
강의 내용을 정리해서 개인 블로그에 올려도 될까요?
0
562
2
TimeUtil.sleep 관련 질문
0
286
1
배압 전략 중에서 DROP 전략과 관련해서 질문 있습니다.
0
335
1
Error 발생 시에도 계속 처리 방법
0
689
2
선언형 프로그래밍과 명령형 프로그래밍
1
784
2
첫번째 강의 부터 이번강의까지 수강하면서 궁금한점 질문드립니다.
0
325
1
안녕하세요. 질문이 있습니다.
1
354
1
logger 가 없는데 util 폴더도 같이 갖다놔야 하나요?
0
327
1
amb 연산자
0
233
1
질문 드립니다.
0
219
1
concatEager( ) 연산자에 관하여
0
318
1
Reactive Streams의 구성요소들과 RxJava의 구성요소들의 관계?
1
397
2
ObservableSequenceEqualExample.java 예제의 delay( ) 연산자 질문있습니다
0
309
3
defer( ), fromFuture( )도 just( )처럼 여러 인자 값을 받을 수 있는지 궁금합니다.
0
264
3
flatMapSingle() 메소드에 대하여
0
620
6
fromFuture() vs fromCallable() 생성 연산자에 대해
0
573
2
함수형 인터페이스 Comparator에 대해
0
397
2





