/** Converts a {@link Map} of integers to a {@link TargetMapping}. */
 public static TargetMapping target(Map<Integer, Integer> map, int sourceCount, int targetCount) {
   final PartialFunctionImpl mapping =
       new PartialFunctionImpl(sourceCount, targetCount, MappingType.FUNCTION);
   for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
     mapping.set(entry.getKey(), entry.getValue());
   }
   return mapping;
 }
 public static Mapping target(List<Integer> sources, int sourceCount) {
   final int targetCount = sources.size();
   final PartialFunctionImpl mapping =
       new PartialFunctionImpl(sourceCount, targetCount, MappingType.FUNCTION);
   for (int target = 0; target < targetCount; target++) {
     int source = sources.get(target);
     mapping.set(source, target);
   }
   return mapping;
 }
 public static Mapping source(List<Integer> targets, int targetCount) {
   final int sourceCount = targets.size();
   final PartialFunctionImpl mapping =
       new PartialFunctionImpl(sourceCount, targetCount, MappingType.FUNCTION);
   for (int source = 0; source < sourceCount; source++) {
     int target = targets.get(source);
     mapping.set(source, target);
   }
   return mapping;
 }
 public static TargetMapping target(
     Function1<Integer, Integer> function, int sourceCount, int targetCount) {
   final PartialFunctionImpl mapping =
       new PartialFunctionImpl(sourceCount, targetCount, MappingType.FUNCTION);
   for (int source = 0; source < sourceCount; source++) {
     Integer target = function.apply(source);
     if (target != null) {
       mapping.set(source, target);
     }
   }
   return mapping;
 }