Guest User

Maps, Lambda and Stream API

a guest
Nov 10th, 2019
276
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import java.util.*;
  2.  
  3. public class Main {
  4.     public static void main(String[] args) {
  5.         Scanner scanner = new Scanner(System.in);
  6.  
  7.         TreeMap<String, List<String>> webSide = new TreeMap<>();
  8.  
  9.         String line = scanner.nextLine();
  10.  
  11.         while (!line.equals("Lumpawaroo")) {
  12.             String[] command;
  13.             String operand = "";
  14.  
  15.             if (line.contains("|")) {
  16.                 command = line.split("\\s+\\|\\s+");
  17.                 operand = "|";
  18.             } else {
  19.                 command = line.split("\\s+->\\s+");
  20.                 operand = "->";
  21.             }
  22.  
  23.             switch (operand) {
  24.                 case "|":
  25.                     String side = command[0];
  26.                     String name = command[1];
  27.  
  28.                     boolean check = false;
  29.  
  30.                     for(Map.Entry<String, List<String>> current : webSide.entrySet()){
  31.                         if(current.getValue().contains(name)){
  32.                             check = true;
  33.                             break;
  34.                         }
  35.                     }
  36.  
  37.                     if(!check){
  38.                         if(!webSide.containsKey(side)){
  39.                             webSide.put(side, new ArrayList<>());
  40.                             webSide.get(side).add(name);
  41.                         }
  42.                         else if(webSide.containsKey(side) && !webSide.get(side).contains(name)){
  43.                             webSide.get(side).add(name);
  44.                         }
  45.                     }
  46.  
  47.                     break;
  48.  
  49.                 case "->":
  50.                     String user = command[0];
  51.                     String whichSide = command[1];
  52.  
  53.                     for (Map.Entry<String, List<String>> current : webSide.entrySet()) {
  54.                         if (current.getValue().contains(user)) {
  55.                             webSide.get(current.getKey()).remove(user);
  56.                             break;
  57.                         }
  58.                     }
  59.  
  60.                     if (!webSide.containsKey(whichSide)) {
  61.                         webSide.put(whichSide, new ArrayList<>());
  62.                         webSide.get(whichSide).add(user);
  63.                         System.out.printf("%s joins the %s side!%n", user, whichSide);
  64.                     }
  65.                     else if (webSide.containsKey(whichSide) && !webSide.get(whichSide).contains(user)) {
  66.                         webSide.get(whichSide).add(user);
  67.                         System.out.printf("%s joins the %s side!%n", user, whichSide);
  68.                     }
  69.  
  70.                     break;
  71.  
  72.                  default: break;
  73.             }
  74.  
  75.             line = scanner.nextLine();
  76.         }
  77.  
  78.         webSide
  79.                 .entrySet()
  80.                 .stream()
  81.                 .filter(users -> users.getValue().size() > 0)
  82.                 .sorted(Map.Entry.<String, List<String>>comparingByValue(Comparator.comparing(List::size)).reversed())
  83.                 .forEach(s -> {
  84.                     System.out.printf("Side: %s, Members: %d%n", s.getKey(), s.getValue().size());
  85.  
  86.                     s.getValue()
  87.                             .stream()
  88.                             .sorted(String::compareTo)
  89.                             .forEach(person -> System.out.printf("! %s%n", person));
  90.                 });
  91.     }
  92. }
RAW Paste Data