title: Guava - How to remove from a list, based on a predicate, keeping track of what was removed?
body: <p>I have an <code>ArrayList</code> to be filtered, and various Guava <code>Predicate</code>s to filter it with. This list will have only 50-100 elements.</p>
  
  <p>I was planning on <code>Iterables.removeIf</code> using each predicate in turn. It is perhaps not maximally efficient but never mind (at least <code>removeIf</code> has some optimization for RandomAccess lists)</p>
  
  <p>For debugging, I want to concisely log what each predicate did. e.g.</p>
  
  <pre><code>Pred0 removed [a, c, g]
  Pred1 removed []
  Pred2 removed [b, f]
  </code></pre>
  
  <p>There are some obvious hack solutions but what would you suggest as the cleanest?</p>
  
  <p>For bonus points, it should be reasonably efficient too. ;)</p>