code: public static <K, V> MutableMap<K, V> selectMapOnValue(Map<K, V> map, final Predicate<? super V> predicate)
      {
          MutableMap<K, V> resultMap = UnifiedMap.newMap();
          final Procedure2<K, V> mapTransferProcedure = new MapPutProcedure<K, V>(resultMap);
          Procedure2<K, V> procedure = new Procedure2<K, V>()
          {
              public void value(K key, V value)
              {
                  if (predicate.accept(value))
                  {
                      mapTransferProcedure.value(key, value);
                  }
              }
          };
          MapIterate.forEachKeyValue(map, procedure);
          return resultMap;
      }
docs: For each <em>value</em> of the source map, the Predicate is evaluated.
  If the result of the evaluation is true, the map entry is moved to a result map.
  The result map is returned containing all entries in the source map that evaluated to true.