View difference between Paste ID: 65B9TG5w and bXt5xzrE
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