Didart

Plant Discovery

Nov 15th, 2021
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.52 KB | None | 0 0
  1. import java.util.*;
  2.  
  3. public class PlantDiscovery {
  4.     public static void main(String[] args) {
  5.         Scanner scanner = new Scanner(System.in);
  6.  
  7.         int n = Integer.parseInt(scanner.nextLine());
  8.  
  9.         Map<String, Integer> plantsRarity = new LinkedHashMap<>();
  10.         Map<String, List<Double>> plantsRating = new LinkedHashMap<>();
  11.        
  12.         for (int index = 0; index < n; index++) {
  13.            
  14.             String[] dataPlant = scanner.nextLine().split("<->");
  15.            
  16.             String plant = dataPlant[0];
  17.             int rarity = Integer.parseInt(dataPlant[1]);
  18.             plantsRarity.put(plant, rarity);
  19.             plantsRating.putIfAbsent(plant, new ArrayList<>());
  20.         }
  21.  
  22.         String input = scanner.nextLine();
  23.         while (!input.equals("Exhibition")) {
  24.             String[] data = input.split(": ");
  25.             String command = data[0];
  26.             String[] information = data[1].split(" - ");
  27.             String plant = information[0];
  28.  
  29.             if (!plantsRarity.containsKey(plant)) {
  30.                 System.out.println("error");
  31.                 input = scanner.nextLine();
  32.                 continue;
  33.             }
  34.  
  35.             switch (command) {
  36.                 case "Rate":
  37.                     double rating = Double.parseDouble(information[1]);
  38.                     plantsRating.get(plant).add(rating);
  39.                     break;
  40.                 case "Update":
  41.                     int newRarity = Integer.parseInt(information[1]);
  42.                     plantsRarity.put(plant, newRarity);
  43.                     break;
  44.                 case "Reset":
  45.                     plantsRating.get(plant).clear();
  46.                     break;
  47.                 default:
  48.                     System.out.println("error");
  49.                     break;
  50.             }
  51.             input = scanner.nextLine();
  52.         }
  53.         System.out.println("Plants for the exhibition:");
  54.         plantsRarity.entrySet()
  55.                 .stream()
  56.                 .sorted(Map.Entry.<String, Integer>comparingByValue()
  57.                         .thenComparingDouble(x -> plantsRating.get(x.getKey()).stream()
  58.                                 .mapToDouble(Double::doubleValue)
  59.                                 .average().orElse(0.0))
  60.                         .reversed())
  61.                 .forEach(e -> System.out.printf("- %s; Rarity: %d; Rating: %.2f%n", e.getKey(), e.getValue(),
  62.                         plantsRating.get(e.getKey()).stream().mapToDouble(Double::doubleValue).average().orElse(0.0)));
  63.     }
  64. }
  65.  
Advertisement
Add Comment
Please, Sign In to add comment