code: public static <S, T, U extends T, V extends T> T findResult(Iterable<S> self, U defaultResult, @ClosureParams(FirstParam.FirstGenericType.class) Closure<V> condition) {
          T result = findResult(self, condition);
          if (result == null) return defaultResult;
          return result;
      }
docs: Iterates through the Iterable calling the given closure condition for each item but stopping once the first non-null
  result is found and returning that result. If all are null, the defaultResult is returned.
  <p>
  Examples:
  <pre class="groovyTestCase">
  def list = [1,2,3]
  assert "Found 2" == list.findResult("default") { it {@code >} 1 ? "Found $it" : null }
  assert "default" == list.findResult("default") { it {@code >} 3 ? "Found $it" : null }
  </pre>
  
  @param self          an Iterable
  @param defaultResult an Object that should be returned if all closure results are null
  @param condition     a closure that returns a non-null value to indicate that processing should stop and the value should be returned
  @return the first non-null result from calling the closure, or the defaultValue
  @since 2.5.0