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.


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í.