Advertisement
Georgi_Benchev

Untitled

Dec 3rd, 2024
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.42 KB | None | 0 0
  1. package set_and_Map.CodingTasks_1;
  2.  
  3. import java.util.*;
  4.  
  5. public class newSolution {
  6.     public static void main(String[] args) {
  7.         Scanner scanner = new Scanner(System.in);
  8.  
  9.         Map<String, Item> inventory = new HashMap<>(); // compare to
  10.         Map<String, Set<Item>> typesInventory = new HashMap<>();
  11.  
  12.         String input = "";
  13.         while (!"end".equals(input = scanner.nextLine())) {
  14.             String[] parameters = input.split(" ");
  15.             String command = parameters[0];
  16.  
  17.             StringBuilder output = new StringBuilder();
  18.             output.append("Ok: ");
  19.  
  20.             if (command.equals("add")) {
  21.                 String itemName = parameters[1];
  22.                 double itemPrice = Double.parseDouble(parameters[2]);
  23.                 String itemType = parameters[3];
  24.  
  25.                 if (inventory.containsKey(itemName)) {
  26.                     System.out.printf("Error: Item %s already exists%n", itemName);
  27.                 } else {
  28.                     Item newItem = new Item(itemName, itemPrice, itemType);
  29.                     inventory.put(itemName, newItem);
  30.  
  31.                     typesInventory.putIfAbsent(itemType, new TreeSet<>());
  32.                     typesInventory.get(itemType).add(newItem);
  33.                     System.out.printf("Ok: Item %s added successfully%n", itemName);
  34.                 }
  35.                 continue;
  36.             } else if (command.equals("filter")) {
  37.                 String filtrationType = parameters[2];
  38.  
  39.                 if (filtrationType.equals("price")) {
  40.                     String priceType = parameters[3];
  41.  
  42.                     if (priceType.equals("to")) {
  43.                         double maxPrice = Double.parseDouble(parameters[4]);
  44.  
  45.                         inventory.values().stream()
  46.                                 .sorted()
  47.                                 .filter(e -> e.getPrice() <= maxPrice)
  48.                                 .limit(10)
  49.                                 .forEach(e -> output.append(String.format("%s, ", e.asString())));
  50.  
  51.                     } else if (priceType.equals("from")) {
  52.                         double minValue = Double.parseDouble(parameters[4]);
  53.  
  54.                         inventory.values().stream()
  55.                                 .sorted()
  56.                                 .filter(parameters.length == 5 ? e -> e.getPrice() >= minValue : e -> e.getPrice() >= minValue
  57.                                         && e.getPrice() <= Double.parseDouble(parameters[6]))
  58.                                 .limit(10)
  59.                                 .forEach(e -> output.append(String.format("%s, ", e.asString())));
  60.                     }
  61.  
  62.                 } else if (filtrationType.equals("type")) {
  63.                     String typeToFilter = parameters[3];
  64.  
  65.                     if (!typesInventory.containsKey(typeToFilter)) {
  66.                         System.out.printf("Error: Type %s does not exist%n", typeToFilter);
  67.                         continue;
  68.                     }
  69.  
  70.  
  71.                     typesInventory.get(typeToFilter).stream()
  72.                             .limit(10)
  73.                             .forEach(e -> output.append(String.format("%s, ", e.asString())));
  74.                 }
  75.             }
  76.  
  77.             if (output.length() == 4) {
  78.                 System.out.println("Ok: ");
  79.             } else {
  80.                 System.out.println(output.substring(0, output.length() - 2));
  81.             }
  82.         }
  83.     }
  84. }
  85.  
  86. class Item implements Comparable<Item> {
  87.     String name;
  88.     double price;
  89.     String type;
  90.  
  91.     public String getName() {
  92.         return name;
  93.     }
  94.  
  95.     public double getPrice() {
  96.         return price;
  97.     }
  98.  
  99.     public String getType() {
  100.         return type;
  101.     }
  102.  
  103.     public Item(String name, double price, String type) {
  104.         this.name = name;
  105.         this.price = price;
  106.         this.type = type;
  107.     }
  108.  
  109.     public String asString() {
  110.         return String.format("%s(%.2f)", name, price);
  111.     }
  112.  
  113.     @Override
  114.     public int compareTo(Item o) {
  115.         return Comparator
  116.                 .comparing(Item::getPrice)
  117.                 .thenComparing(Item::getName)
  118.                 .thenComparing(Item::getType)
  119.                 .compare(this, o);
  120.     }
  121.  
  122.     @Override
  123.     public boolean equals(Object obj) {
  124.         if (obj == null) return false;
  125.         if (!(obj instanceof Item)) return false;
  126.         Item item = (Item) obj;
  127.         return item.name.equals(name);
  128.     }
  129. }
  130.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement