NadezhdaGeorgieva

09.ForceBook

Nov 17th, 2020
973
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. package bg.softuni.javafundamentals;
  2.  
  3. import java.util.*;
  4.  
  5. public class E09ForceBook {
  6.     public static void main(String[] args) {
  7.         Scanner scanner = new Scanner(System.in);
  8.  
  9.         TreeMap<String, List<String>> sides = new TreeMap<>();
  10.  
  11.         String input = scanner.nextLine();
  12.         while (!"Lumpawaroo".equals(input)){
  13.  
  14.             String[] tokens;
  15.             String forceSide;
  16.             String forceUser;
  17.             if (input.contains("|")){
  18.                 tokens = input.split(" \\| ");
  19.                 forceSide = tokens[0];
  20.                 forceUser = tokens[1];
  21.                 if (!sides.containsKey(forceSide)){
  22.                     sides.putIfAbsent(forceSide, new ArrayList<>());
  23.                 }
  24.                 for (Map.Entry<String, List<String>> current : sides.entrySet()) {
  25.                     if (!current.getValue().contains(forceUser)) {
  26.                         sides.get(forceSide).add(forceUser);
  27.                         break;
  28.                     }
  29.                 }
  30.  
  31.             } else {
  32.                 tokens = input.split(" -> ");
  33.                 forceUser = tokens[0];
  34.                 forceSide = tokens[1];
  35.                 for (Map.Entry<String, List<String>> current : sides.entrySet()) {
  36.                     if (current.getValue().contains(forceUser)) {
  37.                         sides.get(current.getKey()).remove(forceUser);
  38.                         break;
  39.                     }
  40.                 }
  41.                 if (!sides.containsKey(forceSide)){
  42.                     sides.putIfAbsent(forceSide, new ArrayList<>());
  43.                 }
  44.                 sides.get(forceSide).add(forceUser);
  45.                 System.out.printf("%s joins the %s side!%n", forceUser, forceSide);
  46.             }
  47.             input = scanner.nextLine();
  48.         }
  49.  
  50.         sides.entrySet()
  51.                 .stream()
  52.                 .filter(users -> users.getValue().size() > 0)
  53.                 .sorted((f, s) -> {
  54.                     int result = s.getValue().size() - f.getValue().size(); //sorted by size descending
  55.                     if (result == 0){
  56.                     result = f.getKey().compareTo(s.getKey()); //by name
  57.                 }
  58.                 return result;
  59.                 }).forEach(s -> {
  60.                     System.out.printf("Side: %s, Members: %d%n", s.getKey(), s.getValue().size());
  61.  
  62.                     s.getValue()
  63.                             .stream()
  64.                             .sorted(String::compareTo)
  65.                             .forEach(user -> System.out.printf("! %s%n", user));
  66.                 });
  67.     }
  68. }
  69.  
RAW Paste Data