响应式中如何对操作后的数据流里面的数据进行排序

flatmap操作符和conatmap操作符的区别
1.concatMap类似for循环一样遍历处理元素,一个元素处理慢了,后面元素就得等着前面处理完,而flatMap则是并行处理,返回的元素是无序的,谁先处理完谁排放出去。
2.问题查一次团检下的所有医院,再查每家医院下存在的套餐,最后返回一个 ComgcHostitalAndSetMealDto
ComgcHostitalAndSetMealDto类

@Data
public class ComgcHostitalAndSetMealDto {

    /***
     * 团检医院编码
     */
    private String hspCode;
    /**
     * 团检医院名称
     */
    private String hspName;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date createdAt;
    private List<GcSimpleSetMealBo> comGcGroupSetMeals;
    private List<GcSimpleSetMealBo> comGcFamilySetMeals;

}

3.查询团检中所有的医院和每家医院下所有的套餐,最后对数据流进行排序,按照医院的创建时间排序

    @Override
    public Flux<ComgcHostitalAndSetMealDto> findComGcHospitalAndSetMeal(String gcCode) {
        Query query = new Query();
        query.addCriteria(Criteria.where("gc_code").is(gcCode)).addCriteria(Criteria.where("enable").is(true));
        query.fields().include("code").include("hsp_name").include("hsp_code").include("created_at");
        return reactiveMongoTemplate.find(query, ComGcHospital.class)
                .flatMap(comGcHospital -> {
                    ComgcHostitalAndSetMealDto comgcHostitalAndSetMealDto = new ComgcHostitalAndSetMealDto();
                    comgcHostitalAndSetMealDto.setHspName(comGcHospital.getHspName());
                    comgcHostitalAndSetMealDto.setHspCode(comGcHospital.getHspCode());
                    comgcHostitalAndSetMealDto.setCreatedAt(comGcHospital.getCreatedAt());
                    List<GcSimpleSetMealBo> comGcGroupSetMeals = new ArrayList<>();
                    List<GcSimpleSetMealBo> comGcFamilySetMeals = new ArrayList<>();
                    Query query1 = new Query();
                    query1.addCriteria(Criteria.where("gc_hsp_code").is(comGcHospital.getCode()));
                    query1.addCriteria(new Criteria().orOperator(
                            Criteria.where("type").is(Globals.GcSetMeal.Type.GROUP.getName()),
                            Criteria.where("type").is(Globals.GcSetMeal.Type.FAMILY.getName())));
                    query1.with(Sort.by(Sort.Order.asc("sort_no"), Sort.Order.asc("created_at")));
                    return reactiveMongoTemplate.find(query1, ComGcSetMeal.class)
                            .map(comGcSetMeal -> {
                                String sellingPrice = ValueUtil.decimal128ToString(comGcSetMeal.getSellingPrice());
                                GcSimpleSetMealBo gcSimpleSetMealBo = new GcSimpleSetMealBo();
                                gcSimpleSetMealBo.setSellingPrice(sellingPrice);
                                return ConvertUtil.convert(comGcSetMeal, gcSimpleSetMealBo);
                            })
                            .collectList()
                            .flatMap(comGcSetMealsList -> {
                                if (CollectionUtils.isEmpty(comGcSetMealsList)) {
                                    return Mono.just(comgcHostitalAndSetMealDto);
                                }
                                for (GcSimpleSetMealBo gcSetMealBo : comGcSetMealsList) {
                                    if (gcSetMealBo.getType().equals(Globals.GcSetMeal.Type.GROUP.getName())) {
                                        comGcGroupSetMeals.add(gcSetMealBo);
                                    }
                                    if (gcSetMealBo.getType().equals(Globals.GcSetMeal.Type.FAMILY.getName())) {
                                        comGcFamilySetMeals.add(gcSetMealBo);
                                    }
                                }
                                comgcHostitalAndSetMealDto.setComGcGroupSetMeals(comGcGroupSetMeals);
                                comgcHostitalAndSetMealDto.setComGcFamilySetMeals(comGcFamilySetMeals);
                                return Mono.just(comgcHostitalAndSetMealDto);
                            });
                })
                .sort(Comparator.comparing(ComgcHostitalAndSetMealDto::getCreatedAt));
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值