MartinPaunov

Srbsko Unleashed

Jun 16th, 2018
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.40 KB | None | 0 0
  1. import java.util.LinkedHashMap;
  2. import java.util.Map;
  3. import java.util.Scanner;
  4.  
  5. public class test {
  6.     public static void main(String[] args) {
  7.         Scanner scanner = new Scanner(System.in);
  8.  
  9.         LinkedHashMap<String, LinkedHashMap<String, Integer>> venues = new LinkedHashMap<>();
  10.         while (true) {
  11.             String line = scanner.nextLine();
  12.  
  13.             if ("End".equals(line)) {
  14.                 break;
  15.             }
  16.  
  17.             String[] tokens = line.split(" @");
  18.             if (tokens.length != 2)
  19.                 continue;
  20.  
  21.             String singerName = tokens[0];
  22.             String[] venueAndTicketTokens = tokens[1].split(" ");
  23.  
  24.             if (venueAndTicketTokens.length < 3) //venue name + ticket price + ticket count -> minimum 3 elements
  25.                 continue;
  26.  
  27.             int ticketCount = validateNumber(venueAndTicketTokens[venueAndTicketTokens.length - 1]);
  28.             int ticketPrice = validateNumber(venueAndTicketTokens[venueAndTicketTokens.length - 2]);
  29.  
  30.             if (ticketCount == -1 || ticketPrice == -1)
  31.                 continue;
  32.  
  33.             String venueName = getVenueName(venueAndTicketTokens);
  34.  
  35.             venues.putIfAbsent(venueName, new LinkedHashMap<>());
  36.             venues.get(venueName).putIfAbsent(singerName, 0);
  37.  
  38.             int currentSum = ticketCount * ticketPrice;
  39.             venues.get(venueName).put(singerName, venues.get(venueName).get(singerName) + currentSum);
  40.         }
  41.  
  42.         for (Map.Entry<String, LinkedHashMap<String, Integer>> entry : venues.entrySet()) {
  43.             System.out.println(entry.getKey());
  44.             entry.getValue()
  45.                     .entrySet()
  46.                     .stream()
  47.                     .sorted((s1, s2) -> s2.getValue().compareTo(s1.getValue()))
  48.                     .forEach(s -> System.out.printf("#  %s -> %d%n", s.getKey(), s.getValue()));
  49.         }
  50.     }
  51.  
  52.     private static String getVenueName(String[] venueAndTicketTokens) {
  53.         String result = "";
  54.  
  55.         for (int i = 0; i < venueAndTicketTokens.length - 2; i++) {
  56.             result += venueAndTicketTokens[i] + " ";
  57.         }
  58.  
  59.         return result.trim();
  60.     }
  61.  
  62.     private static int validateNumber(String element) {
  63.         int number = -1;
  64.  
  65.         try {
  66.             number = Integer.parseInt(element);
  67.         } catch (NumberFormatException ignored) {
  68.         }
  69.  
  70.         return number;
  71.     }
  72.  
  73. }
Advertisement
Add Comment
Please, Sign In to add comment