Java Basics Functional Programming and Stream API сортиране по два критерия.
Вдъхновен от домашното за функционално програмиране на Java, ето тук: https://softuni.bg/downloads/svn/java-basics/Mar-2016/5.Functional-Programming-and-StreamAPI-Homework.docx
Реших да направя на Java домашното по функционално програмиране от курса по Advanced C#, ето тук: https://softuni.bg/downloads/svn/csharp-advanced/Feb-2016/4.%20Advanced-CSharp-Functional-Programming-Homework.zip
Добутах ги до 5та задача, ето ми решенията: http://pastebin.com/6A073vyr
а това е класът Student: http://pastebin.com/ZmbKqmXP
Въпросът ми е, как да сортирам студентите първо по firstName, а след това по lastName? Опитвам се да използвам Lambda expressions от java 8, това което на някои места го наричат "нов начин", щото има и "стар начин" и той май е малко по-дървен.
Та примерно:
studentsCopy.sort(((s1, s2) -> s2.getFirstName().compareTo(s1.getFirstName()))); studentsCopy.forEach(s -> System.out.println(s.getFirstName() + " " + s.getLastName()));
Това ми ги сортира по първо име в низходящ ред, ама как сега да ги сортира и по фамилия?
Благодаря много за отговора, добре си го описал и го разбрах! Схванах идеята, приложих я и стана. Да попитам и още нещо, по същата логика тръгнах да решавам следния проблем: extract the students with exactly two marks "2". С две думи, студентите имат List с оценки и трябва да изкарам име, фамилия и оценките само на тези, които имат по две двойки.
Ей така го направих, кажете дали е добре или има и по-готин начин.
studentsCopy.forEach(s -> { if (weekStudentOrNot(s.getMarks())) { System.out.println(s.getFirstName()+" "+s.getLastName()+" "+s.getMarks()); } } );
и отдолу има една функцийка - private static boolean weekStudentOrNot(List<Integer> arr), която има for цикъл вътре и връща true, ако има две двойки и false при всички други случаи.