Advertisement
Guest User

Untitled

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