desislava_topuzakova

13. Сръбско Unleashed

Sep 24th, 2021
821
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. package SetsAndMaps;
  2.  
  3. import java.util.*;
  4.  
  5. public class demo {
  6.     public static void main(String[] args) {
  7.         Scanner scanner = new Scanner (System.in);
  8.  
  9.         LinkedHashMap<String, LinkedHashMap<String, Integer>> concerts = new LinkedHashMap<>();
  10.  
  11.         String input = scanner.nextLine();
  12.  
  13.         while(!input.equals("End")) {
  14.             //Lepa Brena @Sunny Beach 25 3500
  15.             if(!input.contains("@") || input.charAt(input.indexOf("@") - 1) != ' '){
  16.                 input = scanner.nextLine();
  17.                 continue;
  18.             }
  19.  
  20.             String singer = input.substring(0, input.indexOf("@") - 1);
  21.             int firstIndexOfNumber = 0;
  22.             //@Sunny Beach 25
  23.             for (int i = input.indexOf("@"); i < input.length(); i++) {
  24.                 char currentSymbol = input.charAt(i);
  25.                 if(Character.isDigit(currentSymbol) && input.charAt(i - 1) == ' '){
  26.                     firstIndexOfNumber = i;
  27.                     break;
  28.                 }
  29.             }
  30.  
  31.             if(firstIndexOfNumber == 0) {
  32.                 input = scanner.nextLine();
  33.                 continue;
  34.             }
  35.  
  36.             String venue = input.substring(input.indexOf("@") + 1, firstIndexOfNumber - 1);
  37.             String numbers = input.substring(firstIndexOfNumber);//"25 3000"
  38.             String [] numbersArray = numbers.split("\\s+");
  39.             if(numbersArray.length != 2) {
  40.                 input = scanner.nextLine();
  41.                 continue;
  42.             }
  43.             int price = Integer.parseInt(numbersArray[0]);
  44.             int capacity = Integer.parseInt(numbersArray[1]);
  45.  
  46.             //venue -> {singer -> price}
  47.  
  48.             if (!concerts.containsKey(venue)) {
  49.                 LinkedHashMap<String, Integer> singers = new LinkedHashMap<>();
  50.                 singers.put(singer, price * capacity);
  51.                 concerts.put(venue, singers);
  52.             } else {
  53.                 LinkedHashMap<String, Integer> currentSingers = concerts.get(venue);
  54.                 if (currentSingers.containsKey(singer)) {
  55.                     currentSingers.put(singer, currentSingers.get(singer) + price * capacity);
  56.                 } else {
  57.                     currentSingers.put(singer, price * capacity);
  58.                 }
  59.  
  60.                 concerts.put(venue, currentSingers);
  61.             }
  62.             input = scanner.nextLine();
  63.         }
  64.  
  65.         for (String venue : concerts.keySet()) {
  66.             System.out.println(venue);
  67.  
  68.             LinkedHashMap<String, Integer> singers = concerts.get(venue);
  69.             singers.entrySet().stream().sorted((singer1, singer2) -> singer2.getValue().compareTo(singer1.getValue()))
  70.                     .forEach(singer -> System.out.println(String.format("#  %s -> %d", singer.getKey(), singer.getValue())));
  71.  
  72.         }
  73.     }
  74.  
  75.  
  76.  
  77.  
  78. }
RAW Paste Data