title: How to apply multiple predicates to a java.util.Stream?
body: <p>How can I apply multiple predicates to a <code>java.util.Stream's</code> <code>filter()</code> method?</p>
  
  <p>This is what I do now, but I don't really like it. I have a <code>Collection</code> of things and I need to reduce the number of things based on the <code>Collection</code> of filters (predicates):</p>
  
  <pre><code>Collection&lt;Thing&gt; things = someGenerator.someMethod();
  List&lt;Thing&gt; filtered = things.parallelStream().filter(p -&gt; {
     for (Filter f : filtersCollection) {
        if (f.test(p))
          return true;
     }
     return false;
  }).collect(Collectors.toList());
  </code></pre>
  
  <p>I know that if I knew number of filters up-front, I could do something like this:</p>
  
  <pre><code>List&lt;Thing&gt; filtered = things.parallelStream().filter(filter1).or(filter2).or(filter3)).collect(Collectors.toList());
  </code></pre>
  
  <p>But how can I apply unknown number of predicates without mixing programming styles? For know it looks sort of ugly...</p>