inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Kevin의 알기 쉬운 RxJava 1부

변환 연산자 (1)

groupby 질문있습니다!

해결된 질문

364

윤지상

작성한 질문수 14

1

groupby 연산자를 사용하면.. 

db 쿼리 처럼 특정 컬럼기준으로 합계를 구한다던가.. 계산된 데이터를 확인하는 용도가 아닌거 같은데요..

groupby 를 사용해도 결국엔 filter 연산자를 사용해서 내가 원하는 데이터를 걸러내야 하는거 같은데요..

차라리 이러면 생성자로부터 통지받은 데이터를 애초부터 groupby 를 사용하지 않고 filter 연산자로만 걸러내는방식이랑 어떤점이 다를까요?

Reactive Programming RxJava Reactive-Streams 함수형-프로그래밍

답변 5

1

Kevin

아니에요. 부족하지만 저도 제가 아는걸 다른분들께 공유하면 보람도 되고, 더불어 저도 더 성장할 수 있고 또 아기 분유값도 벌 수 있어서 좋습니다. ^^;; 지상님도 개발자로써 멋진 인생 살아가시길 기원하겠습니다. 감사합니다!

0

윤지상

존경합니다. 직장과 육아가 있는데 시간쪼개서 강의도 제작하시니 반성하게 되네요 ! 화이팅입니다! 

0

Kevin

현재 Spring Reactive Web Applications 강의를 준비하고 있는 중입니다. 1부는 Reactor 위주이구요. 2부는 WebFlux를 이용한 Reactive Web Application 을 만들어보는것입니다. 직장이랑 육아때문에 강의 제작할 수 있는 작업 시간이 많이 나지않아서 강의 하나 올리는데 기간이 꽤 걸리네요. ^^; 제 개인적인 바램으로는 겨울이 가기 전에 오픈할 수 있었으면 하는 바램이에요. RxJava 강의를 오픈할때부터 Spring 베이스의 Reactive Application을 염두에 두고 있었으니까 죄송하지만 조금만 기다려주시면 감사드릴게요. 충분한 답변이 되셨다고 하니 다행입니다. ^^

0

윤지상

아 자세한 답변 너무나도 감사합니다! 다시 작성해주신 코드를 보니 groupby 를 사용하는 목적을 제대로 이해했네요! 

혹시 추후 Spring 기반의 Mono Flux 를 다루는 API 서버 리액터 프로그래밍 강좌도 준비하실 계획없으세요?ㅎㅎ 

저도 그렇고 다들 스프링 리액터 강좌를 기다리시는 분들이 많을거 같네요! ^^

0

Kevin

말씀하신대로 사용한 두번째 예제 코드에서 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