Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.company;
- import java.util.*;
- import java.util.stream.Collectors;
- public class Main {
- public static void main(String[] args) {
- Scanner scanner = new Scanner(System.in);
- String input = scanner.nextLine();
- LinkedHashMap<String, ArrayList<String>> studentsInCourse = new LinkedHashMap<>();
- while (!input.equals("End")) {
- String[] tokens = input.split(" : ");
- String course = tokens[0];
- String name = tokens[1];
- if (!studentsInCourse.containsKey(course)) {
- studentsInCourse.put(course, new ArrayList<>());
- studentsInCourse.get(course).add(name);// в текущия курс добавяме студента
- } else {
- studentsInCourse.get(course).add(name);
- }
- input = scanner.nextLine();
- }
- studentsInCourse
- .entrySet()
- .stream()//минаваме по всички двойки key-value
- //първо сортираме по брой студенти в курс , т.е по value на ArrayList, .size e int за това Comparator.comparingInt(за всеки лист::размера)
- .sorted(Map.Entry.<String, ArrayList<String>>comparingByValue(Comparator.comparingInt(ArrayList::size))//size ни дава броя за съответния курс
- .reversed()
- .thenComparing(Map.Entry.comparingByKey()))//ако са с равен брой студенти подреждаме по key за това LinkedHashMap
- .forEach(entry -> {//може да си го кръстим и само е вместо entry, но на следващия forEach когато печатаме value трябва
- // да го кръстим по друг начин а не пак е
- String temp = String.valueOf(entry.getValue().size());//в променлива пазим броя студенти за даден курс
- //за да можем да изпечатаме броя
- System.out.printf("%s: %s%n", entry.getKey(), temp);// слагаме след печатането ; и продължаваме на нов ред с
- // печатането на value
- entry.getValue()// в случая value е текущото име
- .stream()
- .sorted(Comparator.naturalOrder())//по азбучен ред
- .forEach(e -> System.out.printf("-- %s%n", e));//за да изпечата всяко следващо име правим ламбда
- });
- }
- }
Add Comment
Please, Sign In to add comment