Advertisement
Guest User

Untitled

a guest
Mar 7th, 2018
416
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.71 KB | None | 0 0
  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;
  4. import java.util.*;
  5. import java.util.regex.Matcher;
  6. import java.util.regex.Pattern;
  7.  
  8. public class Ex04ForceBook01 {
  9.     private static Pattern sideUserPattern = Pattern.compile("(?<forceSide>.+)\\s+\\|\\s+(?<forceUser>.+)");
  10.     private static Pattern changeSidePattern = Pattern.compile("(?<forceUser>.+)\\s+->\\s+(?<forceSide>.+)");
  11.     private static HashMap<String, String> users = new HashMap<>();
  12.  
  13.     public static void main(String[] args) throws IOException {
  14.         BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
  15.  
  16.         String input;
  17.         while (! "Lumpawaroo".equals(input = reader.readLine())) {
  18.             joinSide(input);
  19.             changeSide(input);
  20.         }
  21.  
  22.         TreeMap<String, TreeSet<String>> forceSide = groupByForceSIde();
  23.         printResult(forceSide);
  24.  
  25.     }
  26.  
  27.     private static void printResult(TreeMap<String, TreeSet<String>> forceSide) {
  28.         forceSide.entrySet().stream()
  29.                 .filter(s -> s.getValue().size() > 0)
  30.                 .sorted((s1, s2) -> Integer.compare(s2.getValue().size(), s1.getValue().size()))
  31.                 .forEach(s -> {
  32.                     System.out.println(String.format("Side: %s, Members: %d", s.getKey(), s.getValue().size()));
  33.                     s.getValue().forEach(u -> {
  34.                         System.out.println(String.format("! %s", u));
  35.                     });
  36.                 });
  37.     }
  38.  
  39.     private static TreeMap<String, TreeSet<String>> groupByForceSIde() {
  40.         TreeMap<String, TreeSet<String>> forceSide = new TreeMap<>();
  41.         for (Map.Entry<String, String> sides : users.entrySet()) {
  42.             forceSide.putIfAbsent(sides.getValue(), new TreeSet<>());
  43.             forceSide.get(sides.getValue()).add(sides.getKey());
  44.         }
  45.         return forceSide;
  46.     }
  47.  
  48.     private static void changeSide(String input) {
  49.         Matcher changeSideMatcher = changeSidePattern.matcher(input);
  50.         if (changeSideMatcher.find()) {
  51.             String forceUser = changeSideMatcher.group("forceUser");
  52.             String forceSide = changeSideMatcher.group("forceSide");
  53.             users.put(forceUser, forceSide);
  54.             System.out.println(String.format("%s joins the %s side!", forceUser, forceSide));
  55.         }
  56.     }
  57.  
  58.     private static void joinSide(String input) {
  59.         Matcher sideUserMatcher = sideUserPattern.matcher(input);
  60.         if (sideUserMatcher.find()) {
  61.             String forceUser = sideUserMatcher.group("forceUser");
  62.             String forceSide = sideUserMatcher.group("forceSide");
  63.             users.putIfAbsent(forceUser, forceSide);
  64.         }
  65.     }
  66. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement