title: How can I make this rxjava zip to run in parallel?
body: <p>I have a sleep method for simulating a long running process.</p>
  
  <pre><code>private void sleep() {
      try {
          Thread.sleep(2000);
      } catch (InterruptedException e) {
          e.printStackTrace();
      }
  }
  </code></pre>
  
  <p>Then I have a method returns an Observable containing a list of 2 strings that is given in the parameters. It calls the sleep before return the strings back.</p>
  
  <pre><code>private Observable&lt;List&lt;String&gt;&gt; getStrings(final String str1, final String str2) {
      return Observable.fromCallable(new Callable&lt;List&lt;String&gt;&gt;() {
          @Override
          public List&lt;String&gt; call() {
              sleep();
              List&lt;String&gt; strings = new ArrayList&lt;&gt;();
              strings.add(str1);
              strings.add(str2);
              return strings;
          }
      });
  }
  </code></pre>
  
  <p>Then I am calling the getStrings three times in Observalb.zip, I expect those three calls to run in parallel, so the total time of execution should be within <strong>2 seconds</strong> or maybe 3 seconds the most because the sleep was only 2 seconds. However, it's taking a total of <strong>six</strong> seconds. <strong>How can I make this to run in parallel so it will finish within 2 seconds?</strong></p>
  
  <pre><code>Observable
  .zip(getStrings("One", "Two"), getStrings("Three", "Four"), getStrings("Five", "Six"), mergeStringLists())
  .subscribeOn(Schedulers.io())
  .observeOn(AndroidSchedulers.mainThread())
  .subscribe(new Observer&lt;List&lt;String&gt;&gt;() {
      @Override
      public void onCompleted() {
  
      }
  
      @Override
      public void onError(Throwable e) {
  
      }
  
      @Override
      public void onNext(List&lt;String&gt; strings) {
          //Display the strings
      }
  });
  </code></pre>
  
  <p>The mergeStringLists method</p>
  
  <pre><code>private Func3&lt;List&lt;String&gt;, List&lt;String&gt;, List&lt;String&gt;, List&lt;String&gt;&gt; mergeStringLists() {
      return new Func3&lt;List&lt;String&gt;, List&lt;String&gt;, List&lt;String&gt;, List&lt;String&gt;&gt;() {
          @Override
          public List&lt;String&gt; call(List&lt;String&gt; strings, List&lt;String&gt; strings2, List&lt;String&gt; strings3) {
              Log.d(TAG, "...");
  
              for (String s : strings2) {
                  strings.add(s);
              }
  
              for (String s : strings3) {
                  strings.add(s);
              }
  
              return strings;
          }
      };
  }
  </code></pre>