@Override
 public String valueOf(T object) {
   for (Function<T, String> function : this.functions) {
     String result = function.valueOf(object);
     if (StringIterate.notEmpty(result)) {
       return result;
     }
   }
   return null;
 }
 @Override
 public I valueOf(T1 object) {
   for (Function<T1, I> function : this.functions) {
     I result = function.valueOf(object);
     if (Iterate.notEmpty(result)) {
       return result;
     }
   }
   return null;
 }
 @Override
 public V valueOf(T object) {
   for (Function<T, V> function : this.functions) {
     V result = function.valueOf(object);
     if (result != null) {
       return result;
     }
   }
   return null;
 }
 public <P> V getIfAbsentWith(K key, Function<? super P, ? extends V> function, P parameter) {
   V result = this.get(key);
   if (this.isAbsent(result, key)) {
     return function.valueOf(parameter);
   }
   return result;
 }
 public static <T, V1, V2> Function<T, Pair<V1, V2>> pair(
     Function<? super T, V1> function1, Function<? super T, V2> function2) {
   return t -> Tuples.pair(function1.valueOf(t), function2.valueOf(t));
 }