Программа не проходит валидацию и я решил вывести на экран, чтобы посмотреть что происходит.
Создал в мейне словарь используя первый метод. Метод мне вернул заполненный словарь. Я его вывел на экран. Тут вроде понятно у метода нет аргументов и мы просто вызываем метод через createMap(), он внутри метода создает словарь, заполняет его и возвращает нам.
Дальше нам нужно вызвать второй метод, чтобы удалить из него тех сотрудников у кого значение меньше 500. Так как метод не возвращает ничего, мы используем вывод на экран прямо в методе. Метод принимает в качестве аргумента HashMap<String, Integer> и дальше в методе мы будет использовать переменную map для обращения к этому словарю. У меня сразу возникает вопрос.
1) Когда мы вызываем статический метод и и передаем в качестве аргумента словарь map созданный в мейне - removeItemFromMap(map) - мы же копируем словарь в переменную map - removeItemFromMap(HashMap<String, Integer> map) - над которым мы теперь можем производить операции в методе. Получается мы же теперь работаем с копией и действия в методе никак не меняет мейновский словарь ?
2) В условии задачи не конкретизируют же что надо удалить элементы из оригинального переданного во второй метод словаря ? Нужно просто в методе удалить элементы из словаря и все ?
3) Если нет, то как тогда в статическом методе (невозвращаемым ничего) можно удалять элементы из оригинального словаря ? (Я пробовал использовать ссылку на оригинальный словарь во втором методе, но в компиляторе пишет can not find simbol.
Кстати и вывод на экран в методе не работает почему то, смотрите что выводит:
Akk 1000
Asta 1000
Alko 1000
Aleks 1000
Aka 1000
Afop 1000
Aga 100
Aleksy 200
Alek 1000
Abo 1000
java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextNode(HashMap.java:1442)
at java.util.HashMap$EntryIterator.next(HashMap.java:1476)
at java.util.HashMap$EntryIterator.next(HashMap.java:1474)
at com.javarush.task.task08.task0818.Solution.removeItemFromMap(Solution.java:30)
at com.javarush.task.task08.task0818.Solution.main(Solution.java:55)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.javarush.task.common.model.execution.ExecuteService.callMainMethod(ExecuteService.java:78)
at com.javarush.task.common.model.execution.ExecuteService.execute(ExecuteService.java:102)
at com.javarush.task.app.execution.ExecutionService.execute(ExecutionService.java:110)
at com.javarush.task.app.execution.ExecutionService.main(ExecutionService.java:254)
at com.javarush.task.app.MainApplication.main(MainApplication.java:49)
package com.javarush.task.task08.task0818;
import java.util.HashMap;
import java.util.Map;
/*
Только для богачей
*/
public class Solution {
public static HashMap<String, Integer> createMap() {
HashMap<String, Integer> map = new HashMap<>();
map.put("Alek", 1000);
map.put("Aleks", 1000);
map.put("Aleksy", 200);
map.put("Aka", 1000);
map.put("Akk", 1000);
map.put("Aga", 100);
map.put("Asta", 1000);
map.put("Afop", 1000);
map.put("Abo", 1000);
map.put("Alko", 1000);
return map;
}
public static void removeItemFromMap(HashMap<String, Integer> map) {
for (HashMap.Entry<String, Integer> it : map.entrySet())
{
if (it.getValue() < 500)
map.remove(it.getKey());
}
for (HashMap.Entry<String, Integer> pair : map.entrySet())
{
System.out.println(pair.getKey() + " " + pair.getValue());
}
}
public static void main(String[] args) {
HashMap<String, Integer> map = createMap();
for (HashMap.Entry<String, Integer> pair : map.entrySet())
{
System.out.println(pair.getKey() + " " + pair.getValue());
}
removeItemFromMap(map);
}
}