Methods creating transform functionality on Collections
I see the Supplier-less option as being a very broken one. Consider the following code:

transform(linkedList.sublist(0, linkedList.size() / 2), i -&gt; (i + 1) + "-" + i);


Or, any of the other collections that do not have a meaningful default constructor:

transform(Arrays.asList(argv), a -&gt; a.toLowerCase());


The code will cause more headaches than the small requirement to add the supplier will require.

The Generics of the mapping are also broken when there is no supplier, because the actual type of the return list should be more specific....

Lose the first static method.

The second method looks fine, except for the ordering of the arguments. I would make the supplier the middle, not the last argument (and I would introduce some newlines to make it not-so-long-of-a-line):

public static &lt;E, R, C extends Collection&lt;R&gt;&gt; C transform(
          final Collection&lt;E&gt; collection,
          final Supplier&lt;C&gt; collectionSupplier,
          final Function&lt;? super E, ? extends R&gt; mapper) {
    ....
}


The logical reading of that order is better, take this collection, map to that collection, and use this function to do it..... maybe it is not such a big deal...?

The use-case seems to read better for me:

List&lt;String&gt; lcargs = transform(Arrays.asList(args), ArrayList::new, a -&gt; a.toLowerCase());