SHOW:
|
|
- or go back to the newest paste.
| 1 | import java.util.*; | |
| 2 | ||
| 3 | public class ForceBook {
| |
| 4 | public static void main(String[] args) {
| |
| 5 | Scanner scanner = new Scanner(System.in); | |
| 6 | String input = scanner.nextLine(); | |
| 7 | //страна -> списък с user-и | |
| 8 | Map<String, List<String>> forceBook = new LinkedHashMap<>(); | |
| 9 | while (!input.equals("Lumpawaroo")) {
| |
| 10 | ||
| 11 | ||
| 12 | if (input.contains("|")) {
| |
| 13 | //Команда 1: input = "{forceSide} | {forceUser}" -> split(" | ") -> ["forceSide", "forceUser"]
| |
| 14 | String forceSide = input.split("\\s+\\|\\s+")[0];
| |
| 15 | String forceUser = input.split("\\s+\\|\\s+")[1];
| |
| 16 | //проверка дали я има страната | |
| 17 | //ако я няма -> създаваме | |
| 18 | forceBook.putIfAbsent(forceSide, new ArrayList<>()); | |
| 19 | //проверка дали user-a го има | |
| 20 | //ако го няма -> трябва да го добавим към новата страна | |
| 21 | boolean isExist = false; | |
| 22 | for (List<String> list : forceBook.values()) {
| |
| 23 | if (list.contains(forceUser)) {
| |
| 24 | isExist = true; | |
| 25 | } | |
| 26 | } | |
| 27 | if (!isExist) {
| |
| 28 | //forceUser добавяме го в forceSide | |
| 29 | forceBook.get(forceSide).add(forceUser); | |
| 30 | } | |
| 31 | ||
| 32 | } else if (input.contains("->")) {
| |
| 33 | //Команда 2: "{forceUser} -> {forceSide}" -> split(" -> ") -> ["forceUser", "forceSide"]
| |
| 34 | String forceUser = input.split("\\s+->\\s+")[0];
| |
| 35 | String forceSide = input.split("\\s+->\\s+")[1];
| |
| 36 | //премахваме User-a от текущата му страна | |
| 37 | forceBook.entrySet().forEach(entry -> entry.getValue().remove(forceUser)); | |
| 38 | //проверка дали я има страната | |
| 39 | //ако я няма -> създаваме | |
| 40 | /*if(!forceBook.containsKey(forceSide)) {
| |
| 41 | forceBook.put(forceSide, new ArrayList<>()); | |
| 42 | }*/ | |
| 43 | forceBook.putIfAbsent(forceSide, new ArrayList<>()); | |
| 44 | //ако я има -> към списъка добавяме user | |
| 45 | forceBook.get(forceSide).add(forceUser); | |
| 46 | System.out.printf("%s joins the %s side!%n", forceUser, forceSide);
| |
| 47 | } | |
| 48 | input = scanner.nextLine(); | |
| 49 | } | |
| 50 | ||
| 51 | //key(side) -> value(list of people) | |
| 52 | forceBook.entrySet().stream().filter(entry -> entry.getValue().size() > 0) | |
| 53 | .sorted((e1, e2) -> {
| |
| 54 | //1. по големина на броя на хората -> descending order | |
| 55 | int sortedResult = Integer.compare(e2.getValue().size(), e1.getValue().size()); | |
| 56 | //1 -> втория размер > първия размер -> разменя | |
| 57 | //0 -> размерите на двата списъка са еднакви | |
| 58 | //-1 -> втория размер < първия размет -> не ги разменя | |
| 59 | if (sortedResult == 0) {
| |
| 60 | //броят на хората в двете страни е еднакъв -> сортирам по име на страната | |
| 61 | sortedResult = e1.getKey().compareTo(e2.getKey()); | |
| 62 | //е1 < е2 -> -1 | |
| 63 | //е1 == е2 -> 0 | |
| 64 | //е1 > е2 -> 1 | |
| 65 | } | |
| 66 | return sortedResult; | |
| 67 | }).forEach(entry -> {
| |
| 68 | //Side: {forceSide}, Members: {forceUsers.Count}
| |
| 69 | System.out.printf("Side: %s, Members: %d%n", entry.getKey(), entry.getValue().size());
| |
| 70 | entry.getValue().stream().sorted().forEach(user -> System.out.println("! " + user));
| |
| 71 | }); | |
| 72 | ||
| 73 | ||
| 74 | } | |
| 75 | } | |
| 76 |