【问题标题】:Java iterate List<? extends Flux>Java 迭代列表<?扩展通量>
【发布时间】:2020-01-19 18:16:18
【问题描述】:

我的方法得到了 Flux。 如何迭代 Flux? 我想检查它的对象并对每个 Child 进行操作。

public void write(List<? extends Flux<Child>> childFlux) throws Exception {

    childFlux.stream()
            .map(children -> children.collectList())
            .forEach(child -> run(child); //not compile

} 

 public void run(Child child) {
      //TO DO
 }

【问题讨论】:

    标签: java iterator spring-webflux flux


    【解决方案1】:

    这似乎是一种反模式。但是有一些基本的错误。

    1. map(children -&gt; children.collectList()) 将返回 Mono&lt;List&lt;Child&gt;&gt;
    2. forEach(child -&gt; run(child); 你忘记了一个右括号,应该是forEach(child -&gt; run(child));
    3. 但它不会编译,因为 child 将是 Mono&lt;List&lt;Child&gt;&gt; 而不是 Child
    4. 当您使用响应式编程时,订阅前什么都没有发生

    你真正需要做的是像

    Flux.concat(childFlux).subscribe(this::run)
    

    连接在一个 Iterable 中提供的所有源,转发由下游源发出的元素。

    或者

    Flux.merge(childFlux).subscribe(this::run)
    

    将数组/可变参数中包含的 Publisher 序列中的数据合并到交错的合并序列中。与 concat 不同,源被热切地订阅。

    【讨论】:

      猜你喜欢
      • 2023-03-08
      • 1970-01-01
      • 2010-10-19
      • 2012-03-08
      • 2014-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多