Advertisement
kaloyan99

Untitled

Jul 6th, 2021
27
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.50 KB | None | 0 0
  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;
  4. import java.util.HashMap;
  5. import java.util.List;
  6. import java.util.Map;
  7. import java.util.Scanner;
  8. import java.util.stream.Collectors;
  9.  
  10. public class Main {
  11. public static void main(String[] args) throws IOException {
  12. Scanner scanner = new Scanner(System.in);
  13. // BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  14. InventoryManager manager = new InventoryManager();
  15. //String input = br.readLine();
  16. String input = scanner.nextLine();
  17. StringBuilder filter = new StringBuilder();
  18. List<Product> filtered;
  19.  
  20.  
  21. while (!input.equals("end")) {
  22. String command = input.split(" ")[0];
  23.  
  24.  
  25. if (command.equals("add")) {
  26. String[] parameters = input.split(" ");
  27. Product product = new Product(parameters[1], Double.parseDouble(parameters[2]), parameters[3]);
  28. manager.add(product);
  29.  
  30.  
  31. } else if (input.contains("filter by type")) {
  32.  
  33.  
  34. String type = input.split(" ")[3];
  35. filtered = manager.filterByType(manager.items, type);
  36.  
  37.  
  38. boolean hasType = manager.items.values()
  39. .stream()
  40. .anyMatch(product -> product.type.equals(type));
  41.  
  42.  
  43. if (hasType) {
  44. filtered = manager.sortList(filtered);
  45. filter.append("Ok: ");
  46.  
  47.  
  48. for (Product product : filtered) {
  49. filter.append(product.name).append("(").append(product.price).append("), ");
  50. }
  51.  
  52.  
  53. System.out.println(filter.toString().substring(0, filter.length() - 2));
  54. filter = new StringBuilder();
  55.  
  56.  
  57. } else {
  58. System.out.printf("Error: Type %s does not exists%n", type);
  59. }
  60.  
  61.  
  62. filter = new StringBuilder();
  63.  
  64.  
  65. } else if (input.contains("filter by price")) {
  66. String[] parameters = input.split(" ");
  67.  
  68.  
  69. if (parameters.length == 5) {
  70. double filterPrice = Double.parseDouble(parameters[4]);
  71.  
  72.  
  73. if (parameters[3].equals("from")) {
  74. filtered = manager.filterByPriceFrom(manager.items, filterPrice);
  75.  
  76.  
  77. if (filtered.isEmpty()) {
  78. System.out.println("Ok: ");
  79. } else {
  80. filtered = manager.sortList(filtered);
  81. filter.append("Ok: ");
  82. for (Product product : filtered) {
  83. filter.append(product.name).append("(").append(product.price).append("), ");
  84. }
  85. System.out.println(filter.toString().substring(0, filter.length() - 2));
  86. filter = new StringBuilder();
  87. }
  88.  
  89.  
  90. } else {
  91. filtered = manager.filterByPriceTo(manager.items, filterPrice);
  92.  
  93.  
  94. if (filtered.isEmpty()) {
  95. System.out.println("Ok: ");
  96.  
  97.  
  98. } else {
  99. filtered = manager.sortList(filtered);
  100. filter.append("Ok: ");
  101. for (Product product : filtered) {
  102. filter.append(product.name).append("(").append(product.price).append("), ");
  103. }
  104.  
  105.  
  106. System.out.println(filter.toString().substring(0, filter.length() - 2));
  107. filter = new StringBuilder();
  108. }
  109. }
  110.  
  111.  
  112. } else {
  113. double filterPriceFrom = Double.parseDouble(parameters[4]);
  114. double filterPriceTo = Double.parseDouble(parameters[6]);
  115. filtered = manager.filterByPriceFromTo(manager.items, filterPriceFrom, filterPriceTo);
  116.  
  117.  
  118. if (filtered.isEmpty()) {
  119. System.out.println("Ok: ");
  120.  
  121.  
  122. } else {
  123. filtered = manager.sortList(filtered);
  124. filter.append("Ok: ");
  125.  
  126.  
  127. for (Product product : filtered) {
  128. filter.append(product.name).append("(").append(product.price).append("), ");
  129. }
  130.  
  131.  
  132. System.out.println(filter.toString().substring(0, filter.length() - 2));
  133. filter = new StringBuilder();
  134. }
  135. }
  136. }
  137. //input = br.readLine();
  138. input = scanner.nextLine();
  139. }
  140. }
  141.  
  142. public static class Product implements Comparable<Product> {
  143.  
  144.  
  145. private final String name;
  146. private final double price;
  147. private final String type;
  148.  
  149.  
  150. public Product(String name, double price, String type) {
  151. this.name = name;
  152. this.price = price;
  153. this.type = type;
  154. }
  155.  
  156.  
  157. @Override
  158. public int compareTo(Product product) {
  159. int result = 0;
  160. if (this.price > product.price) result = 1;
  161. if (this.price < product.price) result = -1;
  162. if (this.price == product.price) {
  163. result = this.name.compareTo(product.name);
  164. }
  165. return result;
  166. }
  167. }
  168.  
  169. public static class InventoryManager {
  170. private final Map<String, Product> items;
  171.  
  172. public InventoryManager() {
  173. items = new HashMap<>();
  174. }
  175.  
  176. public void add(Product product) {
  177. if (items.containsKey(product.name)) {
  178. System.out.printf("Error: Item %s already exists%n", product.name);
  179. } else {
  180. items.put(product.name, product);
  181. System.out.printf("Ok: Item %s added successfully%n", product.name);
  182. }
  183. }
  184.  
  185. public List<Product> filterByType(Map<String, Product> mapToFilter, String type) {
  186. return mapToFilter.values().stream().filter(product -> product.type.equals(type))
  187. .collect(Collectors.toList());
  188. }
  189.  
  190. public List<Product> filterByPriceFrom(Map<String, Product> mapToFilter, Double priceToCompare) {
  191. return mapToFilter.values().stream().filter(product -> product.price >= priceToCompare)
  192. .collect(Collectors.toList());
  193. }
  194.  
  195. public List<Product> filterByPriceTo(Map<String, Product> mapToFilter, Double priceToCompare) {
  196. return mapToFilter.values().stream().filter(product -> product.price <= priceToCompare)
  197. .collect(Collectors.toList());
  198. }
  199.  
  200. public List<Product> sortList(List<Product> list) {
  201. return list
  202. .stream()
  203. .sorted()
  204. .limit(10)
  205. .collect(Collectors.toList());
  206. }
  207.  
  208. public List<Product> filterByPriceFromTo(Map<String, Product> mapToFilter, Double priceFrom, Double priceTo) {
  209. return mapToFilter.values()
  210. .stream()
  211. .filter(product -> product.price >= priceFrom && product.price <= priceTo)
  212. .collect(Collectors.toList());
  213. }
  214. }
  215. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement