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