Advertisement
Guest User

Untitled

a guest
May 21st, 2019
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.25 KB | None | 0 0
  1. import java.io.*;
  2. import java.util.*;
  3. import java.util.stream.Collectors;
  4.  
  5. public class OrderSystem2 {
  6.  
  7. private static Map<String, Order> orders = new HashMap<>();
  8. private static Map<String, List<Order>> ordersByConsumer = new HashMap<>();
  9.  
  10. private static List<Order> orderList = new ArrayList<>();
  11.  
  12. static class Order implements Comparable {
  13. String name;
  14. double price;
  15. String consumer;
  16.  
  17. public Order(String name, double price, String consumer) {
  18. this.name = name;
  19. this.price = price;
  20. this.consumer = consumer;
  21. }
  22.  
  23. public String getName() {
  24. return name;
  25. }
  26.  
  27. public double getPrice() {
  28. return price;
  29. }
  30.  
  31. public String getConsumer() {
  32. return consumer;
  33. }
  34.  
  35. @Override
  36. public String toString() {
  37. return String.format("{%s;%s;%.2f}", name, consumer, price);
  38. }
  39.  
  40. @Override
  41. public int compareTo(Object o) {
  42. Order order = (Order) o;
  43. int result = Double.compare(order.getPrice(), getPrice());
  44. return result;
  45. }
  46.  
  47. @Override
  48. public boolean equals(Object o) {
  49. if (this == o) return true;
  50. if (o == null || getClass() != o.getClass()) return false;
  51. Order order = (Order) o;
  52. return Objects.equals(consumer, order.consumer);
  53. }
  54.  
  55. @Override
  56. public int hashCode() {
  57. return Objects.hash(consumer);
  58. }
  59. }
  60.  
  61. static String input = "8\n" +
  62. "DeleteOrders Ivan Petrovvvv\n" +
  63. "AddOrder IdeaPad Z560;3500.05;Ivan Petrov\n" +
  64. "AddOrder ThinkPad T410;3000;Ivan Petrov\n" +
  65. "AddOrder VAIO Z13;16400;Pesho\n" +
  66. "AddOrder CLS 63 AMG;21111.50;Gosho\n" +
  67. "FindOrdersByPriceRange 500;30000\n" +
  68. "FindOrdersByConsumer Ivan Petrov\n" +
  69. "FindOrdersByConsumer Ivan Petrov\n";
  70.  
  71. static Reader reader = new StringReader(input);
  72.  
  73. private static StringBuffer result = new StringBuffer();
  74.  
  75. public static void main(String[] args) throws IOException {
  76. // BufferedReader userInput = new BufferedReader(reader);
  77. BufferedReader userInput = new BufferedReader(new InputStreamReader(System.in));
  78. int n = Integer.parseInt(userInput.readLine());
  79.  
  80. while (n > 0) {
  81. String commandLine = userInput.readLine();
  82. String[] commands = commandLine.split(" ");
  83. String command = commands[0];
  84.  
  85. switch (command) {
  86. case "AddOrder":
  87. addOrder(commandLine);
  88. break;
  89.  
  90. case "DeleteOrders":
  91. removeOrders(commands);
  92. break;
  93.  
  94. case "FindOrdersByPriceRange":
  95. filterFromTo(commandLine);
  96. break;
  97.  
  98. case "FindOrdersByConsumer":
  99. findOrdersByConsumer(commandLine);
  100. }
  101. n--;
  102. }
  103. System.out.print(result);
  104. }
  105.  
  106. private static void removeOrders(String[] commands) {
  107. String consumer;
  108. int count = 0;
  109.  
  110. if (commands.length > 2) {
  111. consumer = commands[1] + " " + commands[2];
  112. } else {
  113. consumer = commands[1];
  114. }
  115.  
  116. if (!ordersByConsumer.containsKey(consumer)) {
  117. result.append("No orders found");
  118. } else {
  119. for (Order o : orderList) {
  120. if (o.getConsumer().equals(consumer)) {
  121. count++;
  122. }
  123. }
  124. ordersByConsumer.remove(consumer);
  125. result.append((String.format("%d orders deleted", count)));
  126. }
  127. result.append("\n");
  128. }
  129.  
  130. private static void filterFromTo(String commandLine) {
  131. String[] newCommandLine = commandLine.split(";");
  132. double minValue = Double.parseDouble(newCommandLine[0].substring(23));
  133. double maxValue = Double.parseDouble(newCommandLine[1]);
  134.  
  135. List<Order> filteredOrders = orderList.stream()
  136. .filter(o -> o.getPrice() >= minValue && o.getPrice() <= maxValue)
  137. .sorted()
  138. .collect(Collectors.toList());
  139. if (filteredOrders.isEmpty()) {
  140. result.append("No orders found");
  141. } else {
  142. result.append(filteredOrders.stream().map(Order::toString).collect(Collectors.joining("\n")));
  143. }
  144. result.append("\n");
  145. }
  146.  
  147.  
  148. private static void addOrder(String commandLine) {
  149.  
  150. String[] newCommandLine = commandLine.split(";");
  151.  
  152. String name = newCommandLine[0].substring(9);
  153. double price = Double.parseDouble(newCommandLine[1]);
  154. String consumer = newCommandLine[2];
  155.  
  156. Order newOrder = new Order(name, price, consumer);
  157.  
  158. orders.put(name, newOrder);
  159.  
  160. if (!ordersByConsumer.containsKey(consumer)) {
  161. ordersByConsumer.put(consumer, new ArrayList<>());
  162. }
  163. orderList.add(newOrder);
  164. ordersByConsumer.get(consumer).add(newOrder);
  165. result.append("Order added");
  166. result.append("\n");
  167.  
  168. }
  169.  
  170. private static void findOrdersByConsumer(String commandLine) {
  171. String[] newCommands = commandLine.split(" ");
  172. String consumer;
  173. if (newCommands.length > 2) {
  174. consumer = newCommands[1] + " " + newCommands[2];
  175. } else {
  176. consumer = newCommands[1];
  177. }
  178. if (ordersByConsumer.containsKey(consumer)) {
  179. String resultOrders = ordersByConsumer.get(consumer)
  180. .stream()
  181. .sorted(new NameComparator())
  182. .map(Order::toString)
  183. .collect(Collectors.joining("\n"));
  184. result.append(resultOrders);
  185. } else {
  186. result.append("No orders found");
  187. }
  188. result.append("\n");
  189. }
  190.  
  191. public static class NameComparator implements Comparator<Order> {
  192. @Override
  193. public int compare(Order o1, Order o2) {
  194. return o1.getName().compareTo(o2.getName());
  195. }
  196. }
  197. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement