public class Solution {
public static Map<String, String> createMap() {
Map<String, String> map = new HashMap<>();
map.put("Филипsпов", "Вадasdим");
map.put("Филиппfов", "Вадим");
map.put("Филиппdfgов", "Вадим");
map.put("Филиппоgв", "Вадим");
map.put("Филиппоaв", "Вадим");
map.put("Филиппwqов", "Вадим");
map.put("Филиппоrewв", "Ваsдим");
map.put("Филиппsоqв", "Вадим");
map.put("Филиппsadов", "Ваsdим");
map.put("Филиппqweов", "Вадим");
return map;
}
public static void removeTheFirstNameDuplicates(Map<String, String> map) {
Collection<String> values = map.values();
List<String> valueList = new ArrayList<>(values);
Collections.sort(valueList);
for(String firstName : valueList)
if(Collections.frequency(valueList, firstName)>1)
removeItemFromMapByValue(map, firstName);
}
public static void removeItemFromMapByValue(Map<String, String> map, String value) {
Map<String, String> copy = new HashMap<>(map);
for (Map.Entry<String, String> pair : copy.entrySet()) {
if (pair.getValue().equals(value)) {
map.remove(pair.getKey());
}
}
}
public static void main(String[] args) {
}
}
Сначала создаем мапу, после в методе removeTheFirstNameDuplicates достаем все значения с мапы, создаем список с добавлением всех значений, сортируем его. Дальше создаем цикл for, в нем создаем переменную типа String и вот дальше я ничего не понял... Объясните пожалуйста.Vadim Filippov
15 уровень
Помогите разобраться.
Решен
Комментарии (11)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Ksenia Volkova Java Developer в DXC Master
8 января 2020, 08:44полезный
Лучше ты расскажи, зачем тебе тут понадобилась сортировка.
Или для чего нужно из values делать valueList?
+1
Vadim Filippov
8 января 2020, 09:14
Тут в задаче нужно было удалять одинаковые элементы. Сортировал, чтоб с помощью Collections.frequency находил частоту повторения элементов и если она превышает 1, элемент удаляется.
Или для чего нужно из values делать valueList? values не сортировался у меня, пришлось в Список закинуть и уже там отсортировать🤪
0
Vadim Filippov
8 января 2020, 09:19
Мне вот в скобках не понятен момент. Сначала отсортированный лист и через запятую переменная, через которую проходят значения этого листа. И вот как это понимать.
0
IceBergMaster
8 января 2020, 09:22
Зайди в документацию frequency, почитай о параметрах.
0
Ksenia Volkova Java Developer в DXC Master
8 января 2020, 09:55
Как частота повторения связана с сортировкой?
0
Vadim Filippov
8 января 2020, 10:40
Ну допустим у нас {1, 23, 45, 55, 76, 23, 34, 23}
Сортируем {1, 23, 23, 23, 34, 45, 55, 76}
Частота повторения числа 23 равна 3, а в условии если частота свыше 1 элемент удаляется.
И мы получаем в результате, что одинаковые элементы удалились.
0
Ksenia Volkova Java Developer в DXC Master
8 января 2020, 10:43
А без сортировки мы не могли определить, что частота повторения 23 - 3?
0
Vadim Filippov
8 января 2020, 10:47
А вот это я не знаю. Но думал и думаю, что работает это так. Тот же пример.
Ну допустим у нас {1, 23, 45, 55, 76, 23, 34, 23}.
1 и 23 - не повторяется, дальше 23 и 45 - не повторяется, дальше 45 и 55 - не повторяется.
А при сортировке {1, 23, 23, 23, 34, 45, 55, 76}
1 и 23 - не повторяется, дальше 23 и 23 - повторилось(элемент удаляется), дальше и 23 и 23 - повторилось(элемент удаляется), дальше 23 и 34 - не повторяется.
Если это не так работает опиши плиз.
0
Ksenia Volkova Java Developer в DXC Master
8 января 2020, 10:57
То есть ты решил использовать новый для себя метод Collections.frequency(), сам придумал, как он, по-твоему, должен работать и какие параметры принимать, и пишешь код исходя из этого представления.
А документацию посмотреть не пробовал?
0
Vadim Filippov
8 января 2020, 11:29
Код сработал и совпал с моим пониманием. То что работает иначе я узнал только сейчас, и обратился сюда, чтоб на простых словах объяснили принцип работы. Если ты не в состоянии этого сделать, не пиши больше.
0
Ksenia Volkova Java Developer в DXC Master
8 января 2020, 12:01решение
Понимаешь, можно написать код, который будет работать, но при этом будет выполнять кучу ненужных действий. Можно ли считать, что это хороший код?
Чтобы этого не происходило, ты должен понимать, что и зачем ты пишешь. Вот буквально про каждую строчку - что она делает и зачем она это делает.
Ты мог бы написать свой метод подсчета частоты, в соответствии с тем принципом, который описал - и не было бы вопросов.
Но ты взял готовый метод, даже не посмотрев, что он делает.
Хотя на самом деле даже необязательно разбираться, как он работает внутри - в документации коротко, в паре предложений написано, что делает метод.
Я тебе писать больше не буду, но если ты не изменишь свой подход, то состояние "и вот дальше я ничего не понял" станет для тебя нормой.
+4