Martina312

[НП] - Именик

Aug 22nd, 2020 (edited)
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.15 KB | None | 0 0
  1. import java.util.*;
  2. import java.util.stream.Collectors;
  3.  
  4. class DuplicateNumberException extends Exception{
  5.     public DuplicateNumberException(String message) {
  6.         super(message);
  7.     }
  8. }
  9.  
  10. class Contact{
  11.     private String name;
  12.     private String number;
  13.  
  14.     public Contact(String name, String number) {
  15.         this.name = name;
  16.         this.number = number;
  17.     }
  18.  
  19.     public String getName() {
  20.         return name;
  21.     }
  22.  
  23.     public String getNumber() {
  24.         return number;
  25.     }
  26.  
  27.     @Override
  28.     public boolean equals(Object o) {
  29.         if (this == o) return true;
  30.         if (o == null || getClass() != o.getClass()) return false;
  31.         Contact contact = (Contact) o;
  32.         return number.equals(contact.number);
  33.     }
  34.  
  35.     @Override
  36.     public int hashCode() {
  37.         return Objects.hash(number);
  38.     }
  39.  
  40.     @Override
  41.     public String toString() {
  42.         return name+" "+number;
  43.     }
  44. }
  45.  
  46. class PhoneBook{
  47.     Set<Contact> contacts;
  48.     Map<String, Set<Contact>> nameMap;
  49.  
  50.     public PhoneBook() {
  51.         this.contacts = new TreeSet<>(Comparator.comparing(Contact::getName).thenComparing(Contact::getNumber));
  52.         this.nameMap = new HashMap<>();
  53.     }
  54.  
  55.     public void addContact(String name, String number) throws DuplicateNumberException {
  56.         Contact c = new Contact(name,number);
  57.         if (contacts.contains(c))
  58.             throw new DuplicateNumberException("Duplicate number: "+number);
  59.         contacts.add(c);
  60.         nameMap.computeIfAbsent(name, (k) -> nameMap.put(name, new TreeSet<>(Comparator.comparing(Contact::getName).thenComparing(Contact::getNumber))));
  61.         nameMap.get(name).add(c);
  62.     }
  63.  
  64.     public void contactsByNumber(String number){
  65.         List<Contact> tmp = contacts.stream().filter(contact -> contact.getNumber().contains(number)).collect(Collectors.toList());
  66.         if (tmp.size()==0)
  67.             System.out.println("NOT FOUND");
  68.         else
  69.             tmp.forEach(System.out::println);
  70.     }
  71.  
  72.     public void contactsByName(String name){
  73.         if (!nameMap.containsKey(name))
  74.             System.out.println("NOT FOUND");
  75.         else
  76.             nameMap.get(name).forEach(System.out::println);
  77.     }
  78. }
  79.  
  80. public class PhoneBookTest {
  81.  
  82.     public static void main(String[] args) {
  83.         PhoneBook phoneBook = new PhoneBook();
  84.         Scanner scanner = new Scanner(System.in);
  85.         int n = scanner.nextInt();
  86.         scanner.nextLine();
  87.         for (int i = 0; i < n; ++i) {
  88.             String line = scanner.nextLine();
  89.             String[] parts = line.split(":");
  90.             try {
  91.                 phoneBook.addContact(parts[0], parts[1]);
  92.             } catch (DuplicateNumberException e) {
  93.                 System.out.println(e.getMessage());
  94.             }
  95.         }
  96.         while (scanner.hasNextLine()) {
  97.             String line = scanner.nextLine();
  98.             System.out.println(line);
  99.             String[] parts = line.split(":");
  100.             if (parts[0].equals("NUM")) {
  101.                 phoneBook.contactsByNumber(parts[1]);
  102.             } else {
  103.                 phoneBook.contactsByName(parts[1]);
  104.             }
  105.         }
  106.     }
  107.  
  108. }
Add Comment
Please, Sign In to add comment