title: combine multiple Mono<List<Item>> into one
body: <p>I'm currently working on a project that involves a bit of reactive programming.</p>
  <p>I have 4 different reactive repositories from which I get 4 different <code>Mono&lt;List&lt;SomeType&gt;&gt;</code> in return respectively.
  The goal is to <strong>combine them into a single <code>Mono&lt;List&lt;GeneralType&gt;&gt;</code></strong> in order to incorporate that into a custom Response to return within a <code>ResponseEntity.ok()</code>. I have already taken care of creating a <code>GeneralType</code> and was successful in converting a single <code>Mono&lt;List&lt;SomeType&gt;&gt;</code>, however, made no further progress.</p>
  <p>All repositories have a similar signature:</p>
  <pre><code>public Mono&lt;List&lt;SomeType&gt;&gt; findAllByUserId(UUID userId)
  </code></pre>
  <p>The field in my Response that incorporates all different lists as a single one:</p>
  <pre><code>private Mono&lt;List&lt;GeneralType&gt;&gt; items;
  </code></pre>
  <p>What my method looks like so far:</p>
  <pre><code>public Mono&lt;List&lt;GeneralType&gt;&gt; combineMonos(UUID userId) {
      Mono&lt;List&lt;GeneralType&gt;&gt; combo1 = reactiveRepository.findAllByUserId(userId)
          .map(list -&gt; list.stream()
              .map(GeneralType::new)
              .collect(Collectors.toList()));
      return combo1; // works just fine
  }
  </code></pre>
  <p>All the other lists have pretty much the same approach, but putting them together into a single Mono&lt;List&gt; is a problem.</p>
  <p>I've tried the following:</p>
  <pre><code>return Flux.merge(combo1.flatMapMany(Flux::fromIterable), combo2.flatMapMany(Flux::fromIterable)).collectList();
  </code></pre>
  <p>But with that, the IDE urges to change the return type to <code>Flux&lt;Object&gt;</code>.
  Also, some lists can be empty, so I'm not sure if <code>zip()</code> is an option here. I've read that it will return everything as <em>empty</em> if at least a single result is empty.</p>
  <p>So the question is <strong>how can that be done in an efficient way without <em>block()</em> everywhere?</strong></p>