code: public static <T,K,V> T findResult(Map<K, V> self, @ClosureParams(MapEntryOrKeyValue.class) Closure<T> closure) {
          for (Map.Entry<K, V> entry : self.entrySet()) {
              T result = callClosureForMapEntry(closure, entry);
              if (result != null) {
                  return result;
              }
          }
          return null;
      }
docs: Returns the first non-null closure result found by passing each map entry to the closure, otherwise null is returned.
  If the closure takes two parameters, the entry key and value are passed.
  If the closure takes one parameter, the Map.Entry object is passed.
  <pre class="groovyTestCase">
  assert "Found b:3" == [a:1, b:3].findResult { if (it.value == 3) return "Found ${it.key}:${it.value}" }
  assert null == [a:1, b:3].findResult { if (it.value == 9) return "Found ${it.key}:${it.value}" }
  assert "Found a:1" == [a:1, b:3].findResult { k, v -> if (k.size() + v == 2) return "Found $k:$v" }
  </pre>
  
  @param self    a Map
  @param closure a 1 or 2 arg Closure that returns a non-null value when processing should stop and a value should be returned
  @return the first non-null result collected by calling the closure, or null if no such result was found
  @since 1.7.5