Programming Fundamentals Maps, Lambda and Stream API - Exercise 06. Courses
Моля за съдействие, получавам 20/100 и в двата варианта на кода, грешките са в тестове 1,3,4, и 5.
https://pastebin.com/SKVhrHET
https://pastebin.com/qsmHTqyh
https://pastebin.com/qsmHTqyh
Типичен пример за непълно задание.
Липсва информация какво да е сортирането на курсовете, ако има два или повече курса са с еднакъв брой студенти. В дадените примери също липсва такъв тест, но в Judge очевидно има.
Променете типа на Map-a от HashMap на LinkedHashMap и ще вземете 100/100 в Judge.
При LinkedHashMap се пази последователността на въвеждане на курсовете, а това ще се отрази и на сортирането на курсове с еднакъв брой суденти (запазва се относителната последователност). При HashMap подредбата на курсовете няма връзка с последователноста им и съответно може да получим друга подредба на курсовете с еднакъв брой суденти след сортирането.
Тъй като задачата е от упражнение към Stream API, ще си позволя да покажа и тава решение:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.Comparator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class Pr06Courses {
public static void main(String[] args) {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in, StandardCharsets.UTF_8));
reader.lines()
.takeWhile(line -> !"end".equals(line))
.map(line -> line.split(" : "))
.collect(Collectors.groupingBy(arr -> arr[0],
LinkedHashMap::new,
Collectors.mapping(arr -> arr[1], Collectors.toList())))
.entrySet()
.stream()
.sorted(Map.Entry.<String, List<String>>comparingByValue(Comparator.comparingInt(List::size))
.reversed())
.forEach(kvp -> {
System.out.printf("%s: %d%n", kvp.getKey(), kvp.getValue().size());
kvp.getValue().stream()
.sorted()
.map(name -> "-- " + name)
.forEach(System.out::println);
});
}
}
Благодаря!