Java Spring Webflux Mono:无法将结果收集为列表

Java Spring Webflux Mono:无法将结果收集为列表,java,stream,spring-webflux,Java,Stream,Spring Webflux,我正在使用SpringWebFlux来消费另一个服务,并尝试将结果聚合到不同输入组合的列表中。 但有一点我无法订阅并将结果转换为列表 此方法将获取一个映射并遍历该映射,然后使用不同的输入组合调用另一个服务。 但无法在getAPrice()中继续完成我想要的:( 输入: public Mono getAPrice(){ 返回 Mono.create(monoSink->{ getActiveMonths() .entrySet().stream() .flatMap(e->getContractP

我正在使用SpringWebFlux来消费另一个服务,并尝试将结果聚合到不同输入组合的列表中。 但有一点我无法订阅并将结果转换为列表

  • 此方法将获取一个映射并遍历该映射,然后使用不同的输入组合调用另一个服务。
    但无法在getAPrice()中继续完成我想要的:(

    输入:

    public Mono getAPrice(){
    返回
    Mono.create(monoSink->{
    getActiveMonths()
    .entrySet().stream()
    .flatMap(e->getContractPrice(e.getKey(),e.getValue())
    /*卡在这里,不知道如何订阅和获取AP对象并将其收集为列表*/
    });
    } 
    
    输出:

    expected:List[APrice]
    
  • 上面的getAPrice()调用下面的方法,该方法工作正常,并返回有效输入组合的数据

    输入:

    /*方法工作正常,返回正确输入组合的单声道*/
    公共价格(字符串键、字符串值){
    返回Mono.create(monoSink->{
    acServiceWebClient.getPrice(键,值)
    .subscribe(aPrice->monoSink.success(aPrice),
    错误->{
    monoSink.error(错误);
    });
    });
    }
    
    输出:

    {
    “id”:11,
    “曲线名称”:“NT”,
    “月份”:“2010年3月”,
    “价格”:160.17,
    “状态”:“活动”
    }
    
  • 私有映射getActiveMonths()
    {
    Map hm=新的HashMap();
    hm.put(“键1”、“值1”)
    hm.put(“键2”、“值2”)
    返回hm;
    }
    

    期待得到一些建议来完成getAPrice()以更好的方式,如果我采用了错误的方法,纠正我也会很有帮助。谢谢你,你的工作实际上不需要一个
    MonoSink
    。你可以做的是从你的
    getActiveMonths
    入口集
    创建一个
    Flux
    ,然后用这个
    e>调用方法
    getActivePrice
    ntrySet的
    。因此,您的
    getAPrice实际上应该是


    公共Mono@Ishank,非常感谢您的宝贵意见。我已根据您的意见进行了必要的更改。只需了解,如果getContractPrice返回Mono,我们还需要在此处更改哪些内容。@busywithJava已更新了答案,以解决您在评论中的查询。
    
        private Map<String,String> getActiveMonths()
        {
            Map hm = new HashMap();
            hm.put("key1","value1")
            hm.put("key2","value2")
            return hm;
        }