Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.*;
- import java.util.stream.Collectors;
- public class PlantDiscovery {
- public static void main(String[] args) {
- Scanner sc = new Scanner(System.in);
- int n = Integer.parseInt(sc.nextLine());
- Map<String, Plant> plants = new LinkedHashMap<>();
- for (int i = 0; i < n; i++){
- String[] nextPlant = sc.nextLine().split("<->");
- String name = nextPlant[0];
- int rarity = Integer.parseInt(nextPlant[1]);
- if (plants.containsKey(name)){
- plants.get(name).setRarity(rarity);
- }
- else {
- plants.put(name, new Plant(name, rarity));
- }
- }
- String input;
- while (!"Exhibition".equals(input = sc.nextLine())){
- String[] com = input.split(": ");
- String[] token = com[1].split(" - ");
- String command = com[0];
- String name = token[0];
- Double rating = 0.0;
- int rarity = 0;
- switch (command){
- case "Rate":
- if (plants.containsKey(name) && token.length == 2){
- rating = Double.parseDouble(token[1]);
- plants.get(name).addRating(rating);
- }
- else {
- System.out.println("error");;
- }
- break;
- case "Update":
- if (plants.containsKey(name) && token.length == 2){
- rarity = Integer.parseInt(token[1]);
- plants.get(name).setRarity(rarity);
- }
- else {
- System.out.println("error");;
- }
- break;
- case "Reset":
- if (plants.containsKey(name)){
- plants.get(name).clearRatings();
- }
- else {
- System.out.println("error");;
- }
- break;
- default:
- System.out.println("error");
- break;
- }
- }
- System.out.println("Plants for the exhibition:");
- plants.values().stream()
- .sorted(Comparator.comparing(Plant::getAverageRating).reversed())
- .sorted(Comparator.comparing(Plant::getRarity).reversed())
- .forEach(plant -> {
- System.out.printf("- %s; Rarity: %d; Rating: %.2f%n", plant.getName(), plant.getRarity(), plant.getAverageRating());
- });
- }
- static class Plant{
- private String name;
- private int rarity;
- private List<Double> ratings;
- public Plant(String name, int rarity){
- this.name = name;
- this.rarity = rarity;
- this.ratings = new ArrayList<>();
- }
- public String getName() {
- return name;
- }
- public int getRarity() {
- return rarity;
- }
- public Double getAverageRating(){
- return ratings.stream().collect(Collectors.averagingDouble(Double::doubleValue));
- }
- public void setRarity(int rarity){
- this.rarity = rarity;
- }
- public void addRating(Double rating){
- ratings.add(rating);
- }
- public void clearRatings(){
- ratings.clear();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment