ilianrusev

Maps, Lambda and Stream API - Exercise - Legendary Farming

Mar 19th, 2019
121
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.     package com.company;
  2.  
  3.         import java.util.*;
  4.         import java.util.stream.Collectors;
  5.  
  6.     public class Main {
  7.  
  8.         public static void main(String[] args) {
  9.  
  10.             Scanner scanner =  new Scanner(System.in);
  11.  
  12.             Map<String, Integer> materials = new LinkedHashMap<>();
  13.             Map<String, Integer> junks = new LinkedHashMap<>();
  14.  
  15.             materials.put("shards", 0);
  16.             materials.put("fragments", 0);
  17.             materials.put("motes", 0);
  18.  
  19.             String winner = "";
  20.             boolean flag = false;
  21.  
  22.             do {
  23.  
  24.                 String[] data = scanner.nextLine().split("\\s+");
  25.  
  26.                 for (int i = 0; i < data.length; i += 2) {
  27.  
  28.                     int quantity = Integer.parseInt(data[i]);
  29.                     String material = data[i + 1].toLowerCase();
  30.  
  31.                     if (!materials.containsKey(material)) {
  32.                         if (!junks.containsKey(material)) {
  33.                             junks.put(material, quantity);
  34.                         } else {
  35.                             junks.put(material, junks.get(material) + quantity);
  36.                         }
  37.                     } else {
  38.                         materials.put(material, materials.get(material) + quantity);
  39.                         if (materials.get(material) >= 250) {
  40.                             materials.put(material, materials.get(material) - 250);
  41.                             winner = material;
  42.                             flag = true;
  43.                             break;
  44.                         }
  45.                     }
  46.  
  47.  
  48.                 }
  49.  
  50.             } while (!flag);
  51.  
  52.             if (winner.equals("shards")){
  53.                 System.out.println("Shadowmourne obtained!");
  54.             }else if (winner.equals("motes")){
  55.                 System.out.println("Dragonwrath obtained!");
  56.             }else if (winner.equals("fragments")){
  57.                 System.out.println("Valanyr obtained!");
  58.             }
  59.  
  60.             materials.entrySet()
  61.                     .stream()
  62.                     .sorted((a,b) ->{
  63.                         int sort = Integer.compare(b.getValue(), a.getValue());
  64.                         if (sort == 0){
  65.                             sort = a.getKey().compareTo(b.getKey());
  66.                         }
  67.                         return sort;
  68.                     }).forEach(e -> {
  69.                 System.out.println(String.format("%s: %d",e.getKey(),e.getValue()));
  70.             });
  71.  
  72.             junks.entrySet().stream()
  73.                     .sorted((a,b) -> a.getKey().compareTo(b.getKey()))
  74.                     .forEach(e -> {
  75.                         System.out.println(String.format("%s: %d",e.getKey(),e.getValue()));
  76.                     });
  77.         }
  78.     }
RAW Paste Data Copied