code: public static <K1, V1, K2, V2> MutableMap<K2, V2> collectIf(
              Map<K1, V1> map,
              Function2<? super K1, ? super V1, Pair<K2, V2>> function,
              Predicate2<? super K1, ? super V1> predicate)
      {
          return MapIterate.collectIf(map, function, predicate, UnifiedMap.<K2, V2>newMap());
      }
docs: For each value of the map, the Predicate2 is evaluated with the key and value as the parameter,
  and if true, then {@code function} is applied.
  The results of these evaluations are collected into a new map.