title: What's the purpose of partitioningBy
body: <p>For example, if I intend to partition some elements, I could do something like:</p>
  
  <pre><code>Stream.of("I", "Love", "Stack Overflow")
        .collect(Collectors.partitioningBy(s -&gt; s.length() &gt; 3))
        .forEach((k, v) -&gt; System.out.println(k + " =&gt; " + v));
  </code></pre>
  
  <p>which outputs:</p>
  
  <pre><code>false =&gt; [I]
  true =&gt; [Love, Stack Overflow]
  </code></pre>
  
  <p>But for me <code>partioningBy</code> is only a subcase of <code>groupingBy</code>. Although the former accepts a <code>Predicate</code> as parameter while the latter a <code>Function</code>, I just see a partition as a normal grouping function.</p>
  
  <p>So the same code does exactly the same thing:</p>
  
  <pre><code> Stream.of("I", "Love", "Stack Overflow")
         .collect(Collectors.groupingBy(s -&gt; s.length() &gt; 3))
         .forEach((k, v) -&gt; System.out.println(k + " =&gt; " + v));
  </code></pre>
  
  <p>which also results in a <code>Map&lt;Boolean, List&lt;String&gt;&gt;</code>.</p>
  
  <p>So is there any reason I should use <code>partioningBy</code> instead of <code>groupingBy</code>? Thanks</p>