title: Find the last element matching an expensive condition from a List, using Stream
body: <p>I have an ordered <code>List</code> of roughly one million elements of which I'm looking for the last element that matches a specific condition, but the condition is heavy to compute so it's better if I start from the end instead. There are always roughly <code>log(n)</code> matching elements, with a minimum of 1.</p>
  
  <p>I can do it manually:</p>
  
  <pre><code>List&lt;Element&gt; elements = ...;
  Element element = null;
  for (var it = elements.listIterator(elements.size()); it.hasPrevious(); ) {
    var candidate = it.previous();
    if (heavyConditionPredicate.test(candidate)) {
      element = candidate;
      break;
    }
  }
  </code></pre>
  
  <p>Is there any way to write this using <code>Stream</code>s, so that the <code>heavyConditionPredicate</code> is not tested against each element of the list? If the heavyConditionPredicate would not have been so heavy to compute, I'd have used <a href="https://stackoverflow.com/q/27547519/180719">alternative means</a>, but I'm not that lucky.</p>
  
  <p>Note that <code>elements</code> can be any type of <code>List</code>, and the one I get doesn't necessarily implements <code>RandomAccess</code>, so accessing the list by their index might be costly as well.</p>