Закрепляем адаптер

  • 20
  • Недоступна
Адаптировать Customer и Contact к RowItem. Классом-адаптером является DataAdapter. Инициализируйте countries перед началом выполнения программы. Соответствие кода страны и названия: UA Ukraine RU Russia CA Canada
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (299)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
PhanSca
Уровень 48
9 мая, 14:18
"Инициализируй countries перед началом выполнения программы. Соответствие кода страны и названия: UA Ukraine RU Russia CA Canada" Кто-нибудь мне объяснит, зачем все эти танцы с бубном с перебором по всей Map и поиском совпадения со значением, если можно перевернуть map И заодно превратить O(n) операцию в O(1)
static {
        countries.put( "Ukraine", "UA");
        countries.put( "Russia" ,"RU");
        countries.put("Canada", "CA");
    }

public String getCountryCode() {
            return countries.get(customer.getCountryName());
        }
Иван
Уровень 28
15 мая, 12:40
Мапа - это "ключ - значение". Ключ - он вроде как уникальный, а значения могут повторяться. Т.о по ключу можно однозначно, "поднять" значение, а в обратную сторону надо выбрать именно тО значение, ну или те. В задаче задумка вернуть ключ по значению, Вы возвращаете значение по ключу. Вроде так.
PhanSca
Уровень 48
15 мая, 22:02
public String getCountryCode() {
            for (Map.Entry<String, String> entry : countries.entrySet()) {
                if (entry.getValue().equals(customer.getCountryName())) {
                    return entry.getKey();
                }
            }
            return null;
        }
Вот правильный по задумке авторов код. Верно ли я понял из вашего комментария, что нам в этой задаче показывают, как делать не надо? Потому что этот код (как вы верно заметили про неуникальность значений) может вернуть неверное значение.
Иван
Уровень 28
16 мая, 10:57
В принципе да. В общем случае, в таком коде возвращать надо список ключей. Если верно помню работу return, то этот цикл прервется когда найдет первое подходящее значение. Но там ведь могут быть и другие
Василий
Уровень 25
вчера, 19:39
Ну если такое пропускает валидатор, то ты просто нашел уязвимость, не более) На решение это никак не может претендовать, это про то, как ты обманул глупый валик. Только сильнее разжег и без того огромную ненависть к "кожаным". Ох покарает нас ИИ из-за таких как ты!
LukasKeyn
Уровень 37
1 апреля, 08:58
Еще одна задача, с которой у меня пригорело. Валидатор ругался на customer(хотя у меня один в один в конструкторе как и в правильном решении и на lastName( хотя даже когда я контрол ц и контрол в сделал - ничего не изменилось) В мэйне проверял свое решение - все правильно разбивало. ЗЛЮСЯ
very junior java developer www.codewars.com/r/TTH6EQ
27 марта, 13:32
Вдруг у кого трудности с регулярками. Тут рассказывается что значат все символы регулярки https://tproger.ru/articles/java-regex-ispolzovanie-reguljarnyh-vyrazhenij-na-praktike/ Короче вот регулярочка для разделения номера телефона "[(,),-]" Останется просто склеить массив по образцу.
29 марта, 17:46
я так сделала: replaceAll("\\D", "") - удалить все, что не цифра, а плюсик потом снова добавила.
Антон
Уровень 35
30 марта, 15:28
Я сделал через .split("\\D") а потом слепил все снова в кучу StringBuilder'ом. Получилось неплохо тоже. Хотя .replaseAll("\\D", "") на много остроумнее.
Алексей Щукин
Уровень 26
15 января, 05:08
Всем кто хочет решать подобные задачи быстрее и красивее и не до конца понимает, что такое "регулярные выражения" читайте тут
Andrei Sharapov Backend Developer
15 декабря 2022, 13:13
Это успех ребята!))
Сергей Белов
Уровень 25
26 ноября 2022, 12:36
Несколько раз перечитывал задание прежде чем убедился, что действительно нужно искать "ключ" в HashMap по "значению". В моем представлении логика хранения в HashMap подразумевает искать как раз "значение" по "ключу". В контексте этой задачи нет никаких причин так хранить пары значений или я что-то упустил? Это нормальная практика? Ответьте кто-нибудь кто в теме пожалуйста.
Fermi Arch
Уровень 24
18 ноября 2022, 13:38
почему обратная HashMap не срабатывает? или тестируют что добавляют новые значения в countries?
for (Map.Entry<String, String>  entry : countries.entrySet()) {
    codeByCounteries.put(entry.getValue(), entry.getKey());
}
и потом по нему get работает же корректно
Антон
Уровень 35
30 марта, 15:32
Интересное решение. Лично мне в голову не приходило почему-то... Только оно отсекает любые повторения значений (ключ должен быть уникален, а значение нет), что в этой задаче не принципиально совсем. Я делаю такое обычно через стрим. Так можно получить коллекцию подходящих ключей. В данной задаче решил так:
countries.entrySet().stream()
                    .filter(s -> s.getValue().equals(customer.getCountryName()))
                    .map(Map.Entry::getKey)
                    .findFirst()
                    .get();
Андрей Федоров Android Developer
17 ноября 2022, 13:47
Вроде все понятно. Задачи прям понравились, пришлось повторить прошлые темы.
@Override
        public String getDialString() {
            char[] phone = contact.getPhoneNumber().toCharArray();
            StringBuilder str = new StringBuilder();
            for (int i = 0;i < phone.length; i++) {
                if (Character.isDigit(phone[i])) str.append(phone[i]);
            }
            return String.format("callto://+%s",str);
        }
Bingo Boom
Уровень 30
5 ноября 2022, 18:57
Собрал задачу по подсказкам из комментов)
Игорь Team Lead
8 октября 2022, 20:42
вот этот способ зачетный
return "callto://+" + contact.getPhoneNumber().replaceAll("\\D", "");
Anonymous #3033962
Уровень 42
11 октября 2022, 21:54
Что такое "callto:// ? Скажите пожалуйста...
Игорь Team Lead
12 октября 2022, 21:53
это условие задачи, которое записано в комментариях к методу //For example: callto://+380501234567 найдете его в оригинальном тексте Solution.java
Anonymous #3033962
Уровень 42
14 октября 2022, 19:21
спасибо большой) мне надо сходить к офтальмологу)