class Lists {

  public static <X, Y> List<Y> map(List<X> inputs, Func<? super X, ? extends Y> mapper) {
    if (null == inputs) {
      return null;
    } else if (inputs.isEmpty()) {
      return Collections.emptyList();
    }

    List<Y> out = new ArrayList<Y>();
    for (X in : inputs) {
      out.add(mapper.eval(in));
    }

    return out;
  }

  private  Lists();

}