Advertisement
Guest User

Untitled

a guest
Feb 10th, 2018
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.83 KB | None | 0 0
  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;
  4. import java.text.Collator;
  5. import java.util.*;
  6. import java.util.regex.Matcher;
  7. import java.util.regex.Pattern;
  8. import java.util.stream.Collectors;
  9.  
  10. public class ex04RoliTheCoder01 {
  11.     public static void main(String[] args) throws IOException {
  12.         BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
  13.         String regex = "^(?<id>\\d+)\\s*#(?<eventName>\\w+)\\s*(?<participants>(?:@[a-zA-Z\\d'-]+\\s*)*)$";
  14.         Pattern pattern = Pattern.compile(regex);
  15.         LinkedHashMap<String, LinkedHashSet<String>> eventData = new LinkedHashMap<>();
  16.         LinkedHashMap<String, String> idData = new LinkedHashMap<>();
  17.  
  18.         String input = reader.readLine();
  19.         while (!"Time for Code".equals(input)) {
  20.             Matcher matcher = pattern.matcher(input);
  21.  
  22.             if (matcher.find()) {
  23.                 String id = matcher.group("id");
  24.                 String eventName = matcher.group("eventName");
  25.                 LinkedHashSet<String> people = Arrays.stream(matcher.group("participants").trim().split("\\s+"))
  26.                         .filter(e -> !e.equals(""))
  27.                         .collect(Collectors.toCollection(LinkedHashSet::new));
  28.  
  29.                 if (idData.containsKey(id) && !idData.get(id).equals(eventName)) {
  30.                     input = reader.readLine();
  31.                     continue;
  32.                 } else {
  33.                     idData.put(id, eventName);
  34.                 }
  35.  
  36.                 eventData.putIfAbsent(eventName, new LinkedHashSet<>());
  37.                 eventData.get(eventName).addAll(people);
  38.             }
  39.             input = reader.readLine();
  40.         }
  41.  
  42.         Comparator<String> lowerBeforeUpperCaseSort = new Comparator<String>() {
  43.             Collator myCollator = Collator.getInstance();
  44.  
  45.             @Override
  46.             public int compare(String o1, String o2) {
  47.                 return myCollator.compare(o1, o2);
  48.             }
  49.         };
  50.  
  51.  
  52.         eventData.entrySet().stream()
  53.                 .sorted((a, b) -> {
  54.                     int index = Integer.compare(b.getValue().size(), a.getValue().size());
  55.                     if (index == 0) {
  56.                         index = lowerBeforeUpperCaseSort.compare(a.getKey(),b.getKey());
  57.                     }
  58.                     return index;
  59.                 })
  60.                 .forEach(event -> {
  61.                     System.out.println(String.format("%s - %d", event.getKey(), event.getValue().size()));
  62.                     event.getValue().stream()
  63.                             .sorted(lowerBeforeUpperCaseSort)
  64.                             .forEach(s -> {
  65.                                 System.out.println(String.format("%s", s));
  66.                             });
  67.                 });
  68.  
  69.  
  70.     }
  71.  
  72.  
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement