Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Pizza {
- String pizzaName;
- double price;
- public Pizza(String pizzaName, float price) {
- this.pizzaName = pizzaName;
- this.price = price;
- }
- public String getPizzaName() {
- return pizzaName;
- }
- public double getPrice() {
- return price;
- }
- }
- class PizzaApp {
- Map<String,User> users;
- Map<String,Pizza> pizzas;
- Map<String, Double> pizzasByRevenue;
- Map<String,Map<User,Integer>> mostOrderedByUser;
- public PizzaApp() {
- this.users = new LinkedHashMap<>();
- this.pizzas = new LinkedHashMap<>();
- this.pizzasByRevenue = new LinkedHashMap<>();
- this.mostOrderedByUser = new LinkedHashMap<>();
- }
- public void registerUser(String email, String name, String phone) throws UserAlreadyExistsException {
- if(users.containsKey(email)) {
- throw new UserAlreadyExistsException(email);
- }
- users.putIfAbsent(email,new User(email,name,phone));
- }
- public void makeOrder(String email, String pizzaName, float price) {
- pizzas.putIfAbsent(pizzaName,new Pizza(pizzaName,price));
- pizzasByRevenue.putIfAbsent(pizzaName,0.0);
- pizzasByRevenue.computeIfPresent(pizzaName,(k,v)->v+price);
- mostOrderedByUser.putIfAbsent(pizzaName,new HashMap<>());
- mostOrderedByUser.get(pizzaName).putIfAbsent(users.get(email),0);
- mostOrderedByUser.get(pizzaName).computeIfPresent(users.get(email),(k,v)->v=v+1);
- }
- public void printRevenueByPizza() {
- pizzasByRevenue.entrySet().stream().sorted(Comparator.comparing((Map.Entry<String, Double> entry) ->
- entry.getValue(),Comparator.reverseOrder())
- .thenComparing(entry->entry.getKey(),Comparator.naturalOrder()))
- .forEach(i-> System.out.println(String.format("%s %.2f",i.getKey(),i.getValue())));
- }
- public void printMostFrequentForPizza() {
- for(Map.Entry<String,Map<User,Integer>> mostOrderedByUser : mostOrderedByUser.entrySet()) {
- System.out.println(String.format("Pizza: %s",mostOrderedByUser.getKey()));
- int maxOrdersForPizza = mostOrderedByUser.getValue().values().stream().max(Comparator.naturalOrder()).orElse(0);
- mostOrderedByUser.getValue().entrySet().stream()
- .sorted(Comparator.comparing((Map.Entry<User, Integer> entry) ->
- entry.getKey().id,Comparator.reverseOrder()))
- .filter(i->i.getValue()==maxOrdersForPizza)
- .forEach(i-> System.out.println(String.format("%d %s %d",i.getKey().id,i.getKey().email,i.getValue())));
- }
- }
- }
- class User {
- String email;
- String name;
- String phone;
- int id;
- public static int ID_GENERATOR = 0;
- public User(String email, String name, String phone) {
- this.email = email;
- this.name = name;
- this.phone = phone;
- ID_GENERATOR++;
- this.id = ID_GENERATOR;
- }
- public String getEmail() {
- return email;
- }
- public String getName() {
- return name;
- }
- public String getPhone() {
- return phone;
- }
- public int getId() {
- return id;
- }
- @Override
- public String toString() {
- return "User{" +
- "email='" + email + '\'' +
- ", name='" + name + '\'' +
- ", phone='" + phone + '\'' +
- ", id=" + id +
- '}';
- }
- }
- public class PizzaAppTest {
- public static void main(String[] args) {
- Scanner sc = new Scanner(System.in);
- PizzaApp pizzaApp = new PizzaApp();
- while (sc.hasNextLine()) {
- String line = sc.nextLine();
- String[] parts = line.split("\\s+");
- String method = parts[0];
- if (method.equalsIgnoreCase("registerUser")) {
- String email = parts[1];
- String name = parts[2];
- String phone = parts[3];
- try {
- pizzaApp.registerUser(email, name, phone);
- } catch (UserAlreadyExistsException e) {
- System.out.println(e.getMessage());
- }
- } else if (method.equalsIgnoreCase("makeOrder")) {
- String email = parts[1];
- String pizzaName = parts[2];
- float price = Float.parseFloat(parts[3]);
- pizzaApp.makeOrder(email, pizzaName, price);
- } else if (method.equalsIgnoreCase("printRevenueByPizza")) {
- System.out.println("Print revenue by pizza");
- pizzaApp.printRevenueByPizza();
- } else {
- System.out.println("Print most frequent user(s) by pizza");
- pizzaApp.printMostFrequentForPizza();
- }
- }
- }
- }
- class UserAlreadyExistsException extends Exception {
- public UserAlreadyExistsException(String email) {
- super(String.format("User with email %s already exists", email));
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement