我正在处理某个对象的助焊剂,比如说Flux < MovieReservation >
。其中包含电影ID,名称,时间,标题等信息。因此,我想提取有助于创建新
Flux < MovieShowDetail >
的信息。我的意图是按电影ID将所有保留分组,并将通量分解为一组较小和多个通量(如果有的话,则通量)。
Flux {
movie1 -> Flux<MovieShowDetail>
movie2 -> Flux<MovieShowDetail>
... and so on
}
所以我遇到了这个groupBy方法,该方法只应该做这样的事情。但是,文档的内容确实不够用,尤其是关于如何遍历每部电影及其各自的Flux的内容。
此外,当我尝试通过尝试和错误学习时,处理将在执行groupBy方法之前的操作之后停止。
我试图做
fluxOfSomething
.groupBy( movieReservation -> movieReservation.getMovieId ,
movieReservation -> movieReservation)
以便我可以遍历每个通量并创建MovieShowDetail的新通量。但是,处理永远不会进入此块。我尝试记录东西,但流程从未输入。
flux
.map( movieSomething -> do something)
.groupBy( movieReservation ->
movieReservation.getMovieId , movieReservation ->
movieReservation)
.subscribe("This text doesn't get printed");
我真的需要尽可能多的信息。
答案 0 :(得分:0)
groupBy
产生一个Flux<Flux<T>>
(或更确切地说,一个Flux<GroupedFlux<T>>
,它公开了每个组的密钥)。
必须订阅GroupedFlux
,如Flux
才能生效。因此,您需要做的是以某种方式消耗Flux
产生的内部groupBy
。
一种典型的实现方式是使用flatMap
,它已经进行了Function<T, Flux>
转换。该函数可以像Function.identity()
一样简单(但是如果要进一步处理内部Flux
中的每个元素,则可能应该从flatMap Function
内部进行处理(因为组键位于该lambda的范围。
movieReservations
.groupBy(MovieReservation::movieId)
.flatMap(idFlux -> idFlux
.collectList()
.map(listOfReservations ->
new MovieInformation(idFlux.key(), listOfReservations)
)
);