Skip to content

Latest commit

 

History

History
executable file
·
21 lines (11 loc) · 1.2 KB

11e2.md

File metadata and controls

executable file
·
21 lines (11 loc) · 1.2 KB

Back to questions

Solution to b33f: Bounded generic methods with streams

See code at solutions/code/tutorialquestions/question11e2

Compare the sample source code for this question with your solution.

The signature of the method is:

  public static <E, C extends Collection<E>> Optional<C> getSmallestCollection(List<C> collections);

Unpicking this a bit, the E is the element type of the collections in the list of collections. A simpler method signature is:

  public static <E> Optional<Collection<E>> getSmallestCollection(List<Collection<E>> collections);

but this only works if we pass in a List<Collection<E>>; we cannot pass in a List<Set<E>> for example.

The purpose of C extends Collection<E> is to say that "C is any type that is a subtype of Collection<E>, or Collection<E> itself". The true method signature is the same as the simplified method signature, except that C extends Collection<E> is introduced right after E is introduced, and then C is used instead of Collection<E> thereafter.

The solution has a couple of comments starting: "Think about why ..." -- take a look at these and have a think!