title: What kind of List<E> does Collectors.toList() return?
body: <p>I am reading <a href="http://cr.openjdk.java.net/~briangoetz/lambda/lambda-libraries-final.html">State of the Lambda: Libraries Edition</a>, and am being surprised by one statement:</p>
  
  <p>Under the section <strong>Streams</strong>, there is the following:</p>
  
  <pre><code>List&lt;Shape&gt; blue = shapes.stream()
                           .filter(s -&gt; s.getColor() == BLUE)
                           .collect(Collectors.toList());
  </code></pre>
  
  <p>The document does not state what <code>shapes</code> actually is, and I do not know if it even matters.</p>
  
  <p>What confuses me is the following: What kind of concrete <code>List</code> does this block of code return?</p>
  
  <ul>
  <li>It assigns the variable to a <code>List&lt;Shape&gt;</code>, which is completely fine.</li>
  <li><code>stream()</code> nor <code>filter()</code> decide what kind of list to use.</li>
  <li><code>Collectors.toList()</code> neither specifies the concrete type of <code>List</code>.</li>
  </ul>
  
  <p>So, what <strong>concrete</strong> type (subclass) of <code>List</code> is being used here? Are there any guarantees?</p>