Написал код, вроде рабочий, но не принимает проверка JavaRush, в итоге переделал элегантно и правильно, но не могу понять ГДЕ ошибка. Вроде же всё должно работать. Понимаю, что подход у меня, кхм, интересный, но по моему мнению он должен работать.
Задача такая:
СreateMap
создать HashMap<String, String>
removeTheFirstNameDuplicates
провести поиск и удаление совпадающих значенийremoveItemFromMapByValue
(он уже был готов согласно условию задачи)Ошибку IntelliJ Idea не выдаёт, вроде всё работает, но валидатор JavaRush не принимает (просто Ваша задача не прошла тестирование). Я подозреваю два варианта - либо я молодец, а валидатор нет. Либо я по неопытности что-то сделал не так.
public static HashMap<String, String> createMap() {
HashMap<String, String> map = new HashMap<>();
map.put("К1", "И1");
map.put("К2", "И2");
map.put("К3", "И3");
map.put("К4", "И4");
map.put("К5", "И5");
map.put("К6", "И1");
map.put("К7", "И7");
map.put("К8", "И8");
map.put("К9", "И9");
map.put("К10", "И10");
return map;
}
public static void removeTheFirstNameDuplicates(HashMap<String, String> map) {
ArrayList<String> list = new ArrayList<>();
Iterator<Map.Entry<String, String>> iter = map.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry<String, String> pair = iter.next();
list.add(pair.getValue());
}
HashMap<String, String> copy = new HashMap<>(map);
Iterator<Map.Entry<String, String>> it2 = copy.entrySet().iterator();
while (it2.hasNext()) {
Map.Entry<String, String> pair2 = it2.next();
String smap = pair2.getValue();
for (int i = 0; i < list.size(); i++) {
String sarr = list.get(i);
if (smap.equals(sarr)) {
removeItemFromMapByValue(map, smap);
}
}
}
}
public static void removeItemFromMapByValue(HashMap<String, String> map, String value) {
HashMap<String, String> copy = new HashMap<String, String>(map);
for (Map.Entry<String, String> pair : copy.entrySet()) {
if (pair.getValue().equals(value))
map.remove(pair.getKey());
}
}
public static void main(String[] args) {}
В результате такой итерации вы удалите вообще все вхождения в map:
На этом этапе вы заполняете список значениями из мапы
ArrayList<String> list = new ArrayList<>();
Iterator<Map.Entry<String, String>> iter = map.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry<String, String> pair = iter.next();
list.add(pair.getValue());
}
При этом список будет содержать все значения (включая и просто значения, и дубликаты) и почти эквивалентен результата простого вызова .values()
.
В следующем участке кода вы удаляете из мапы все значения, которые есть в списке
HashMap<String, String> copy = new HashMap<>(map);
Iterator<Map.Entry<String, String>> it2 = copy.entrySet().iterator();
while (it2.hasNext()) {
Map.Entry<String, String> pair2 = it2.next();
String smap = pair2.getValue();
for (int i = 0; i < list.size(); i++) {
String sarr = list.get(i);
if (smap.equals(sarr)) {
removeItemFromMapByValue(map, smap);
}
}
}
Так как в список уже загнаны вообще все значения, мапа очистится целиком.
Ваша настоящая задача - найти все дубликаты, сформировать из них коллекцию, после чего удалить каждый элемент из этой коллекции. Это делается довольно просто с помощью любой реализации Set, при желании можно осуществить вручную итерацией над списком.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть запрос на получение данных с джойном многих таблицНеобходимо отсортировать товары по приоритету поле int Но не у каждого товара есть...
Нужно сделать приложениеЕго суть такова: Есть микроконтроллер (TTL) - он подключается через USB к ПК
Разрабатываю приложение на android - ключевая задача: работа с базой данных