Ivelin_1936

Сръбско Unleashed

May 22nd, 2018
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.25 KB | None | 0 0
  1. package com.company;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.IOException;
  5. import java.io.InputStreamReader;
  6. import java.util.LinkedHashMap;
  7. import java.util.Map;
  8.  
  9. public class Serbian {
  10.     public static void main(String[] args) throws IOException {
  11.         BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
  12.  
  13.         LinkedHashMap<String, LinkedHashMap<String, Integer>> venues = new LinkedHashMap<>();
  14.  
  15.         String input = reader.readLine();
  16.         while (!input.equals("End"))
  17.         {
  18.             String[] inputArr = input.split("@");
  19.  
  20.             String name = inputArr[0];
  21.             if (name.charAt(name.length() - 1) != ' ') {
  22.                 input = reader.readLine();
  23.                 continue;
  24.             }
  25.  
  26.             String[] venuePrice = inputArr[1].split(" ");
  27.             if (venuePrice.length < 3) {
  28.                 input = reader.readLine();
  29.                 continue;
  30.             }
  31.  
  32.             String venue = "";
  33.             for (int i = 0; i < venuePrice.length - 2; i++) {
  34.                 venue += venuePrice[i] + " ";
  35.             }
  36.             venue = venue.trim();
  37.  
  38.             int ticketCount = 0;
  39.             int ticketPrice = 0;
  40.             try {
  41.                 ticketCount = Integer.parseInt(venuePrice[venuePrice.length - 1]);
  42.                 ticketPrice = Integer.parseInt(venuePrice[venuePrice.length - 2]);
  43.             } catch (Exception e) {
  44.                 input = reader.readLine();
  45.                 continue;
  46.             }
  47.  
  48.             //Method for add all data in LinkedHashMap<String, LinkedHashMap<String, Integer>>
  49.             AddVenuesSingerMoney(venues, venue, name, ticketCount, ticketPrice);
  50.  
  51.             //Reading again till input is equal on "End"
  52.             input = reader.readLine();
  53.         }
  54.  
  55.         //Method for printing result
  56.         PrintResult(venues);
  57.  
  58.     }
  59.  
  60.     private static void AddVenuesSingerMoney(LinkedHashMap<String, LinkedHashMap<String, Integer>> venues, String venue, String name, int ticketCount, int ticketPrice) {
  61.         if (!venues.containsKey(venue)) {
  62.             venues.put(venue, new LinkedHashMap<>());
  63.         }
  64.         if (!venues.get(venue).containsKey(name)) {
  65.             venues.get(venue).put(name, 0);
  66.         }
  67.  
  68.         int ticketsSum = ticketCount * ticketPrice;
  69.         int oldSumValue = venues.get(venue).get(name);
  70.         int newSum = oldSumValue + ticketsSum;
  71.         venues.get(venue).put(name, newSum);
  72.     }
  73.  
  74.     private static void PrintResult(LinkedHashMap<String, LinkedHashMap<String, Integer>> venues) {
  75.         //Printing the place
  76.         for (Map.Entry<String, LinkedHashMap<String, Integer>> v : venues.entrySet()) {
  77.             System.out.println(v.getKey());
  78.  
  79.             //Print Name and Sum sorted by sum Descending.
  80.             //If two singers have the same amount of money, keep them
  81.             //>>>in the order in which they were entered. they r in LinkedHashMap<>
  82.             v.getValue().entrySet().stream()
  83.                     .sorted((t1, t2) -> t2.getValue().compareTo(t1.getValue()))
  84.                     .forEach(entry -> {
  85.                         System.out.println(String.format("#  %s -> %d", entry.getKey().trim(), entry.getValue()));
  86.                     });
  87.         }
  88.     }
  89. }
Advertisement
Add Comment
Please, Sign In to add comment