There exists a method on j.u.Stream that makes it a little easier to create an array of an appropriate type (at the expense of throwing a ArrayStoreException if the array component type is not a super type of all elements in the stream):



<A> A[] toArray(IntFunction<A[]> generator);



An equivalent method can also be added to Collection.



Given the existence of:



Collection.toArray(T[] a)



this does introduce a source code incompatibility for code passing nulls:



toArray(null);



although this is only likely to occur in tests (such as the TCK perhaps).