code: public static <T, K, V> Collection<T> findResults(Map<K, V> self, @ClosureParams(MapEntryOrKeyValue.class) Closure<T> filteringTransform) {
          List<T> result = new ArrayList<T>();
          for (Map.Entry<K, V> entry : self.entrySet()) {
              T transformed = callClosureForMapEntry(filteringTransform, entry);
              if (transformed != null) {
                  result.add(transformed);
              }
          }
          return result;
      }
docs: Iterates through the map transforming items using the supplied closure
  and collecting any non-null results.
  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.
  <p>
  Example:
  <pre class="groovyTestCase">
  def map = [a:1, b:2, hi:2, cat:3, dog:2]
  def result = map.findResults { k, v {@code ->} k.size() == v ? "Found $k:$v" : null }
  assert result == ["Found a:1", "Found hi:2", "Found cat:3"]
  </pre>
  
  @param self               a Map
  @param filteringTransform a 1 or 2 arg Closure that should return either a non-null transformed value or null for items which should be discarded
  @return the list of non-null transformed values
  @since 1.8.1