Advertisement
SPDG57

Concert - Sorting Map

Dec 2nd, 2019
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.95 KB | None | 0 0
  1. package com.company;
  2.  
  3. import javafx.util.Pair;
  4.  
  5. import javax.xml.crypto.dsig.keyinfo.KeyValue;
  6. import java.lang.reflect.Array;
  7. import java.security.KeyStore;
  8. import java.text.Collator;
  9. import java.text.DecimalFormat;
  10. import java.util.*;
  11. import java.util.function.Predicate;
  12. import java.util.regex.Matcher;
  13. import java.util.regex.Pattern;
  14. import java.util.stream.Collector;
  15. import java.util.stream.Collectors;
  16.  
  17.  
  18. public class Main {
  19.  
  20.     public static void main(String[] args) {
  21.         Scanner scanner = new Scanner(System.in);
  22.  
  23.         int totalTime = 0;
  24.         Map<String, List<String>> band = new LinkedHashMap<>();
  25.         Map<String, Integer> bandTime = new LinkedHashMap<>();
  26.  
  27.         String input = "";
  28.  
  29.         while(!"start of concert".equals(input = scanner.nextLine())){
  30.             String[] tokens = input.split("; ");
  31.             String command = tokens[0];
  32.  
  33.             String bandName = tokens[1];
  34.             switch (command){
  35.                 case "Add":
  36.                     List<String> members = Arrays.stream(tokens[2].split(", ")).collect(Collectors.toList());
  37.                     if(!band.containsKey(bandName)){
  38.                         band.put(bandName, members);
  39.                     }else{
  40.                         for (String currentMember : members) {
  41.                             if(!band.get(bandName).contains(currentMember))band.get(bandName).add(currentMember);
  42.                         }
  43.                     }
  44.                     break;
  45.                 case "Play":
  46.                     Integer playTime = Integer.parseInt(tokens[2]);
  47.                     totalTime += playTime;
  48.                     if(!bandTime.containsKey(bandName)){
  49.                         bandTime.put(bandName, playTime);
  50.                     }else{
  51.                         bandTime.put(bandName, bandTime.get(bandName) + playTime);
  52.                     }
  53.                     break;
  54.             }
  55.         }
  56.         bandTime = bandTime
  57.                 .entrySet()
  58.                 .stream()
  59.                 .sorted((a, b) -> {
  60.                     if(a.getValue() < b.getValue()){
  61.                         return 1;
  62.                     }else if(a.getValue() > b.getValue()){
  63.                         return -1;
  64.                     }else{
  65.                         return a.getKey().compareTo(b.getKey());
  66.                     }
  67.                 }).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue,
  68.                         (newVal, oldVal) -> oldVal, LinkedHashMap::new));
  69.  
  70.         System.out.println("Total time: " + totalTime);
  71.         for (Map.Entry<String, Integer> entry : bandTime.entrySet()) {
  72.             System.out.printf("%s -> %d\n", entry.getKey(), entry.getValue());
  73.         }
  74.  
  75.         String enterName = scanner.nextLine();
  76.         List<String> members = band.get(enterName);
  77.         System.out.println(enterName);
  78.         for (String member : members) {
  79.             System.out.printf("=> %s\n", member);
  80.         }
  81.     }
  82.  
  83. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement