Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.*;
- import java.util.stream.Collectors;
- class DuplicateNumberException extends Exception{
- public DuplicateNumberException(String message) {
- super(message);
- }
- }
- class Contact{
- private String name;
- private String number;
- public Contact(String name, String number) {
- this.name = name;
- this.number = number;
- }
- public String getName() {
- return name;
- }
- public String getNumber() {
- return number;
- }
- @Override
- public boolean equals(Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
- Contact contact = (Contact) o;
- return number.equals(contact.number);
- }
- @Override
- public int hashCode() {
- return Objects.hash(number);
- }
- @Override
- public String toString() {
- return name+" "+number;
- }
- }
- class PhoneBook{
- Set<Contact> contacts;
- Map<String, Set<Contact>> nameMap;
- public PhoneBook() {
- this.contacts = new TreeSet<>(Comparator.comparing(Contact::getName).thenComparing(Contact::getNumber));
- this.nameMap = new HashMap<>();
- }
- public void addContact(String name, String number) throws DuplicateNumberException {
- Contact c = new Contact(name,number);
- if (contacts.contains(c))
- throw new DuplicateNumberException("Duplicate number: "+number);
- contacts.add(c);
- nameMap.computeIfAbsent(name, (k) -> nameMap.put(name, new TreeSet<>(Comparator.comparing(Contact::getName).thenComparing(Contact::getNumber))));
- nameMap.get(name).add(c);
- }
- public void contactsByNumber(String number){
- List<Contact> tmp = contacts.stream().filter(contact -> contact.getNumber().contains(number)).collect(Collectors.toList());
- if (tmp.size()==0)
- System.out.println("NOT FOUND");
- else
- tmp.forEach(System.out::println);
- }
- public void contactsByName(String name){
- if (!nameMap.containsKey(name))
- System.out.println("NOT FOUND");
- else
- nameMap.get(name).forEach(System.out::println);
- }
- }
- public class PhoneBookTest {
- public static void main(String[] args) {
- PhoneBook phoneBook = new PhoneBook();
- Scanner scanner = new Scanner(System.in);
- int n = scanner.nextInt();
- scanner.nextLine();
- for (int i = 0; i < n; ++i) {
- String line = scanner.nextLine();
- String[] parts = line.split(":");
- try {
- phoneBook.addContact(parts[0], parts[1]);
- } catch (DuplicateNumberException e) {
- System.out.println(e.getMessage());
- }
- }
- while (scanner.hasNextLine()) {
- String line = scanner.nextLine();
- System.out.println(line);
- String[] parts = line.split(":");
- if (parts[0].equals("NUM")) {
- phoneBook.contactsByNumber(parts[1]);
- } else {
- phoneBook.contactsByName(parts[1]);
- }
- }
- }
- }
Add Comment
Please, Sign In to add comment