Advertisement
SPDG57

Message Manager - Map, sorting descend. by val, asc. by name

Dec 4th, 2019
174
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.82 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.  
  21.  
  22.     public static void main(String[] args) {
  23.         Scanner scanner = new Scanner(System.in);
  24.  
  25.         //sent - received
  26.         Map<String, List<Integer>> record = new LinkedHashMap<>();
  27.  
  28.         int capacity = Integer.parseInt(scanner.nextLine());
  29.  
  30.         String input = "";
  31.         while(!"Statistics".equals(input = scanner.nextLine())){
  32.             String[] tokens = input.split("=");
  33.             String command = tokens[0];
  34.  
  35.             switch (command){
  36.                 case "Add":
  37.                     String username = tokens[1];
  38.                     Integer sent = Integer.parseInt(tokens[2]);
  39.                     Integer received = Integer.parseInt(tokens[3]);
  40.                     if(!record.containsKey(username)){
  41.                         List<Integer> messages = new ArrayList<Integer>();
  42.                         messages.add(sent);
  43.                         messages.add(received);
  44.                         record.put(username, messages);
  45.                     }
  46.                     break;
  47.                 case "Message":
  48.                     String sender = tokens[1];
  49.                     String receiver = tokens[2];
  50.                     if(record.containsKey(sender) && record.containsKey(receiver)){
  51.                         int sentMsg = record.get(sender).get(0) + 1;
  52.                         record.get(sender).set(0, sentMsg);
  53.                         if(sentMsg + record.get(sender).get(1) >= capacity){
  54.                             record.remove(sender);
  55.                             System.out.println(sender + " reached the capacity!");
  56.                         }
  57.  
  58.                         int receivedMsg = record.get(receiver).get(1) + 1;
  59.                         record.get(receiver).set(1, receivedMsg);
  60.                         if(receivedMsg + record.get(receiver).get(0) >= capacity){
  61.                             record.remove(receiver);
  62.                             System.out.println(receiver + " reached the capacity!");
  63.                         }
  64.                     }
  65.                     break;
  66.                 case "Empty":
  67.                     String deleteUser = tokens[1];
  68.                     if(deleteUser.equals("All")){
  69.                         record = new LinkedHashMap<>();
  70.                     }else{
  71.                         record.remove(deleteUser);
  72.                     }
  73.                     break;
  74.             }
  75.         }
  76.         System.out.printf("Users count: %d\n", record.size());
  77.         record = record
  78.                 .entrySet()
  79.                 .stream()
  80.                 .sorted((a, b) -> {
  81.                     int userA = a.getValue().get(1);
  82.                     int userB = b.getValue().get(1);
  83.  
  84.                     // sort users in descending order by the received messages
  85.                     // then by username in ascending order
  86.                     if(userA < userB){
  87.                         return 1;
  88.                     }else if(userA > userB){
  89.                         return -1;
  90.                     }else {
  91.                       return  a.getKey().compareTo(b.getKey());
  92.                     }
  93.                 }).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue,  (newVal, oldVal) -> oldVal, LinkedHashMap::new));
  94.  
  95.         for (Map.Entry<String, List<Integer>> entry : record.entrySet()) {
  96.             System.out.printf("%s - %d\n", entry.getKey(), entry.getValue().get(0) + entry.getValue().get(1));
  97.         }
  98.  
  99.     }
  100. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement