使用 zipWith 组合两个 Flux 时出错

Error when combining two Flux using zipWith

我正在学习反应流并尝试按如下方式组合两个 Flux;

        List<Integer> elems = new ArrayList<>();
        Flux.just(10,20,30,40)
            .log()
            .map(x -> x * 2)
            .zipWith(Flux.range(0, Integer.MAX_VALUE), 
                    (two, one) -> String.format("First  : %d, Second : %d \n", one, two))
            .subscribe(elems::add);

调用订阅时,出现以下错误:

Multiple markers at this line
    - The method subscribe(Consumer<? super String>) in the type Flux<String> is not applicable for the arguments 
     (elems::add)
    - The type List<Integer> does not define add(String) that is applicable here

我得到了以下解决问题的建议:

但是 none 这些替代方案有效。 有什么建议,如何解决这个问题?

有时方法引用会让您忽略显而易见的事情。我已经重写了你的函数,但是使用了匿名 class.

  List<Integer> elems = new ArrayList<>();
    Flux.just(10,20,30,40)
        .log()
        .map(x -> x * 2)
        .zipWith(Flux.range(0, Integer.MAX_VALUE),
            (two, one) -> String.format("First  : %d, Second : %d \n", one, two))
        .subscribe(new Consumer<String>() {
          @Override
          public void accept(String s) {

          }
        });

我使用 IDE(intellij) 中的代码完成来创建这个匿名 class。如您所见,此消费者的输入是 String,它来自

String.format("First  : %d, Second : %d \n", one, two)

所以它抱怨说你不能将 String 添加到 List<Integer>,而这正是你试图使用 elems:add

所做的