Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.Scanner;
- import java.util.Comparator;
- import java.util.HashMap;
- import java.util.Map;
- import java.util.TreeMap;
- import java.util.Set;
- import java.util.TreeSet;
- import java.util.*;
- import java.util.stream.Collectors;
- class Contact {
- String name;
- String number;
- public Contact(String name, String number) {
- this.name = name;
- this.number = number;
- }
- public String getName() {
- return name;
- }
- public String getNumber() {
- return number;
- }
- public boolean checkSimularity(String numberPart) {
- Set<String> allParts = new TreeSet<>();
- for(int i=0;i<number.length();i++) {
- for(int j=i+3;j<=number.length();j++) {
- allParts.add(number.substring(i,j));
- }
- }
- //System.out.println(allParts);
- if(allParts.contains(numberPart))
- return true;
- return false;
- }
- @Override
- public String toString() {
- return String.format("%s %s",getName(),getNumber());
- }
- }
- class DuplicateNumberException extends Exception{
- public DuplicateNumberException(String number) {
- super(String.format("Duplicate number: %s",number));
- }
- }
- class PhoneBook {
- Map<String,Contact> contactsByNumberMap = new TreeMap<>();
- Map<String,List<Contact>> contactsByNameMap = new TreeMap<>();
- public void addContact(String name , String number) throws DuplicateNumberException {
- if(contactsByNumberMap.containsKey(number))
- throw new DuplicateNumberException(number);
- Contact contact = new Contact(name, number);
- contactsByNumberMap.putIfAbsent(number, contact);
- contactsByNameMap.putIfAbsent(name, new ArrayList<>());
- contactsByNameMap.get(name).add(contact);
- }
- public void contactsByNumber(String numberPart) {
- Comparator<Contact> comparator = Comparator.comparing(Contact::getName).thenComparing(Contact::getNumber);
- List<Contact> simularContacts = contactsByNumberMap.values().stream().filter(i->i.checkSimularity(numberPart))
- .sorted(comparator).collect(Collectors.toList());
- if(simularContacts.isEmpty()){
- System.out.println("NOT FOUND");
- return ;
- }
- simularContacts.stream().forEach(i-> System.out.println(i));
- }
- public void contactsByName(String name) {
- if(!contactsByNameMap.containsKey(name)){
- System.out.println("NOT FOUND");
- return;
- }
- contactsByNameMap.get(name).stream().sorted(Comparator.comparing(Contact::getNumber)).forEach(i-> System.out.println(i));
- }
- }
- 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]);
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement