4it101»Java8pr 8 Reseni

Java8pr 8 Reseni

Příklad Sestupný seznam - řešení

Před příchodem Javy 8 bylo možné prvky seznamu řadit pomocí metody Collections.sort(), která má dva parametry: seznam k seřazení a instanci rozhraní Comparator<T>, která byla získána pomocí anonymní třídy. Datové proudy nabízejí k třídění prvků v proudu metodu sorted(), která nemusí mít žádný parametr (což lze použít například pro číselný seznam) nebo může být parametrem rozhraní Comparator<T>. Instanci tohoto rozhraní lze získat pomocí lambda výrazu (jedná se totiž o funkční rozhraní).

Jak je vidět z výpisu níže, nejprve je nutné z původního seznamu vytvořit datový proud pomocí metody stream(). Na tento proud lze následně zavolat metodu sorted(), které se jako parametr dosadí Comparator<T> (získání jeho instance pomocí lambda výrazu je ukázáno níže).

Ovšem v této podobě by se seznam seřadil vzestupně a úkolem je získat sestupně seřazený seznam. Proto je na instanci rozhraní Comparator<T> zavolána metoda reversed(). Ta zajistí sestupné řazení. Poté následuje zavolání metody collect() sloužící k vytvoření seznam typu List z datového proudu. Na posledním řádku je pak výsledný seznam vypsán do konzole.

(:source lang=Java -trim +getcode:) Razeni in = new Razeni(); List<Integer> puvodniSeznam = in.getSeznamCisel(); Comparator<Integer> comparator = (a,b)-> a.compareTo(b); List<Integer> serazenySeznam = puvodniSeznam.stream() .sorted(comparator.reversed()) .collect(Collectors.toList()); serazenySeznam.forEach(n -> System.out.println(n));

Celkové řešení je v projektu Sestupný seznam - řešení.