• ,

com.javarush.test.level08.lesson03.task05; Работает правильно

/* Вывести на экран список значений
Есть коллекция HashMap<String, String>, туда занесли 10 различных строк.
Вывести на экран список значений, каждый элемент с новой строки.
*/

Здравствуйте!
Все работает как надо, не принимает. <br />
Если использовать не сокращенную версию вывода, проблему не решает. <br />

public class Solution
{
    public static void main(String[] args) throws Exception
    {
        HashMap<String, String> map = new HashMap<String, String>();
        map.put("Sim", "Sim");
        map.put("Tom", "Tom");
        map.put("Arbus", "Arbus");
        map.put("Baby", "Baby");
        map.put("Cat", "Cat");
        map.put("Dog", "Dog");
        map.put("Eat", "Eat");
        map.put("Food", "Food");
        map.put("Gevey", "Gevey");
        map.put("Hugs", "Hugs");

        printValues(map);
    }

    public static void printValues(Map<String, String> map)
    {
        //напишите тут ваш код
        for (Map.Entry<String,String>entry : map.entrySet())
            System.out.println(entry.getValue());
    }

}
  • ,

level08.lesson08.task03;

Одинаковые имя и фамилия
1. Создать словарь (Map<String, String>)
2. занести в него десять записей по принципу «Фамилия» — «Имя».
3. Проверить сколько людей имеют совпадающие с заданным имя или фамилию.


всё есть, все выполняется, но на сервере не принимается что с main что с выводом информации что без этого.
где подвох?

package com.javarush.test.level08.lesson08.task03;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

/* Одинаковые имя и фамилия
Создать словарь (Map<String, String>)
занести в него десять записей по принципу «Фамилия» - «Имя».
Проверить сколько людей имеют совпадающие с заданным имя или фамилию.
*/

public class Solution
{
    public static void main(String args[])
    {
        HashMap<String,String> hm = createMap();

        int fn_count = getCountTheSameFirstName(hm,"Алексей");
        int ln_count = getCountTheSameLastName(hm,"Аксенов");

        //System.out.println("name: "+fn_count+"\nsurname: "+ln_count);
    }

    public static HashMap<String, String> createMap()
    {
        //напишите тут ваш код
        HashMap<String,String> hm = new HashMap<>();
        hm.put("Алексей","Аксенов");
        hm.put("Андрей","Аксенов");
        hm.put("Сергей","Виноградов");
        hm.put("Кирилл","Гуляев");
        hm.put("Данил","Денисов");
        hm.put("Людвиг","Елисеев");
        hm.put("Герасим","Журавлев");
        hm.put("Иван","Зайцев");
        hm.put("Илья","Исаев");
        hm.put("Захар","Киселев");

        return hm;
    }

    public static int getCountTheSameFirstName(HashMap<String, String> map, String name)
    {
        //напишите тут ваш код
        int counter = 0;
        Iterator<Map.Entry<String,String>> iterator = map.entrySet().iterator();

        while (iterator.hasNext())
        {
            Map.Entry<String,String> pair = iterator.next();
            String key = pair.getKey();
            //String value = pair.getValue();
            if (key.equals(name)) counter++;
        }

        return counter;
    }

    public static int getCountTheSameLastName(HashMap<String, String> map, String lastName)
    {
        //напишите тут ваш код
        int counter = 0;
        Iterator<Map.Entry<String,String>> iterator = map.entrySet().iterator();

        while (iterator.hasNext())
        {
            Map.Entry<String,String> pair = iterator.next();
            //String key = pair.getKey();
            String value = pair.getValue();
            if (value.equals(lastName)) counter++;
        }
        return counter;
    }
}

level08.lesson08.task05

package com.javarush.test.level08.lesson08.task05;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

/* Удалить людей, имеющих одинаковые имена
Создать словарь (Map<String, String>) занести в него десять записей по принципу «фамилия» - «имя».
Удалить людей, имеющих одинаковые имена.
*/

public class Solution
{
    public static void main(String[] args)
    {
        HashMap<String , String> map = createMap();
        removeTheFirstNameDuplicates(map);
        System.out.println(map);
    }
    public static HashMap<String, String> createMap()
    {
        //напишите тут ваш код
        Map<String, String> map = new HashMap<String,String>();
        map.put("Ivanov1", "Pitt");
        map.put("Ivanov2", "Pitt");
        map.put("Ivanov3", "Pit3");
        map.put("Ivanov4", "Pit4");
        map.put("Ivanov5", "Pit5");
        map.put("Ivanov6", "Pit6");
        map.put("Ivanov7", "Pit7");
        map.put("Ivanov8", "Pita");
        map.put("Ivanov9", "Pita");
        map.put("Ivanov0", "Pit0");
        return (HashMap) map;
    }

    public static HashMap<String, String> removeTheFirstNameDuplicates(HashMap<String, String> map)
    {
        //напишите тут ваш код
        String[] name1 = new String[10];
        int i=0;
        Iterator<Map.Entry<String, String>> iterator = map.entrySet().iterator();
        while (iterator.hasNext())
        {
            Map.Entry <String, String> pair = iterator.next();
            String name = pair.getValue();
            name1[i] = name;
            i++;
        }
        for (i = 0; i < 10; i++)
        {
            int j=0;
            Iterator<Map.Entry<String, String>> iterator1 = map.entrySet().iterator();
            while (iterator1.hasNext())
            {
                Map.Entry <String, String> pair = iterator1.next();
                String name = pair.getValue();
                if (name.equals(name1[i])) j++;
            }
            if (j>1) removeItemFromMapByValue(map, name1[i]);
        }
        return map;
    }

    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());
        }
    }
}

Код работает для разных значений. По приведенным в коде выдает ответ: {Ivanov0=Pit0, Ivanov7=Pit7, Ivanov6=Pit6, Ivanov5=Pit5, Ivanov4=Pit4, Ivanov3=Pit3}. Вроде все верно, но сервер не принимает. Просмотрел темы по решению данной задачи у других. Каждый вроде как решает кто на что горазд) я тоже как мог решил. Глаз замылился уже. Может кто-то найдет ошибку. Заранее, спасибо!
  • ,

Итератор. Чтобы не забыть + удаление объектов из map

Оставила себе несколько заданий, чтобы некоторые темы освежить в памяти после следующих уровней.
С итератором возникла проблема.
Пусть тут висит и напоминает, как с ним работать (если вдруг понадобится):


    public static void removeAllSummerPeople(HashMap<String, Date> map)
    {
        //напишите тут ваш код
        Iterator <Map.Entry<String,Date>> iterator=map.entrySet().iterator();

        while (iterator.hasNext()){
            Map.Entry<String,Date> pair=iterator.next();
            int month=pair.getValue().getMonth();
            if(month>=5&&month<8){
                iterator.remove();
            }
        }
    }


И ещё можно удалять объекты из map вот так (копируем map, чтобы не ломался итератор, а удаляем все в оригинальном map):

Map<String, String> map = new HashMap<>();
map.put("1", "2");
map.put("3", "4");

Map<String, String> mapCopy = new HashMap<>(map);
for(Map.Entry<String, String> pair : mapCopy.entrySet()) {
    map.remove(pair.getKey());
}

Удаление записи в Map.

Всем добрый день.

Никак не могу найти ответы на свои вопросы. А именно удаление записи в Map.

С появления коллекций(в лекциях) нас учили удалять их через итератор. Но я прочитал, что значение Map можно удалить путем удаления ключа...map.remove(key);

for (Map.Entry<String, Date> pair: map.entrySet())
{
map.remove(pair.getKey());
}

Почему это не работает??? Ведь foreach НЕЯВНО использует итератор
  • ,

Коллекции. Map. Удаление.

Доброго времени суток. Вопрос в следующем, каким образом происходит удаление элементов из коллекции Map. Пытаюсь решить очередную задачу и не могу продвинуться дальше, так как не понимаю по какому принципу происходит удаление из коллекции.
Суть в том, чтобы удалить одинаковые элементы из коллекции, сравнение происходит по значению (value).
Из лекций 8-го уровня я понял, что «iterator» — это что-то вроде ссылки на нашу коллекцию. Поэтому создал 2 таких ссылки и путем сравнения элементов в коллекции решил удалять элементы на которые ссылается эта ссылка(объект) iterator2.
Разъясните, почему я делаю не правильно. Очень хочу понять где я не прав. Спасибо всем кто отзовется.

for (Iterator<HashMap.Entry<String, String>> iterator1 = map.entrySet().iterator(); iterator1.hasNext();){
            HashMap.Entry<String, String> pair1 = iterator1.next();
            for (Iterator<HashMap.Entry<String, String>> iterator2 = map.entrySet().iterator(); iterator2.hasNext();)
            {
                HashMap.Entry<String, String> pair2 = iterator2.next();
                if(pair1.getValue().equals(pair2.getValue())){
                    map.remove(pair2.getKey());
                }
            }

        }

Еще вариант реализации удаления из коллекции
Iterator<Map.Entry<String, String>> iterator1 = map.entrySet().iterator();
        while(iterator1.hasNext()){
            Map.Entry<String, String> pair1 = iterator1.next();
            Iterator<Map.Entry<String, String>> iterator2 = map.entrySet().iterator();
            while(iterator2.hasNext()){
                Map.Entry<String, String> pair2 = iterator2.next();
                if (pair1.getValue().equals(pair2.getValue())){
                    iterator2.remove();
                }
            }

        }
  • ,

level08.lesson08.task03

Не проходит тестирование с/без main() на сервере. Intellij все правильно компилирует и показывает.
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

/* Одинаковые имя и фамилия
Создать словарь (Map<String, String>) занести в него десять записей по принципу «Фамилия» - «Имя».
Проверить сколько людей имеют совпадающие с заданным имя или фамилию.
*/

public class Solution
{
    public static void main(String[] args)
    {
        Map<String, String> hashMap = createMap();
        int a = getCountTheSameFirstName(hashMap, "Artem");
        int b = getCountTheSameLastName(hashMap, "Name");
        System.out.println(a+" "+b);
    }

    public static Map<String, String> createMap()
    {
        Map<String, String> hashMap = new HashMap<String, String>();
        hashMap.put("Name1", "Artem");
        hashMap.put("Name2", "Artem");
        hashMap.put("Name3", "Anton");
        hashMap.put("Name4", "Anton");
        hashMap.put("Name5", "Liza");
        hashMap.put("Name6", "Katia");
        hashMap.put("Name7", "Marina");
        hashMap.put("Name8", "Marina");
        hashMap.put("Name9", "Misha");
        hashMap.put("Name10", "Liza");
        return  hashMap;
    }

    public static int getCountTheSameFirstName(Map<String, String> map, String name)
    {
        Iterator<Map.Entry<String, String>> iterator = map.entrySet().iterator();
        int count = 0;
        while (iterator.hasNext())
        {
            if(iterator.next().getValue().equals(name))
                count++;
        }
            return count;
    }

    public static int getCountTheSameLastName(Map<String, String> map, String familiya)
    {
        Iterator<Map.Entry<String, String>> iterator = map.entrySet().iterator();
        int count = 0;
        while (iterator.hasNext())
        {
            if(iterator.next().getKey().equals(familiya))
                count++;
        }
        return count;
    }
}
  • ,

level08.lesson08.task03

Программа с/без main() не проходит тестирование. Intellij все компилирует и отображает.
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

/* Одинаковые имя и фамилия
Создать словарь (Map<String, String>) занести в него десять записей по принципу «Фамилия» - «Имя».
Проверить сколько людей имеют совпадающие с заданным имя или фамилию.
*/

public class Solution
{
    public static void main(String[] args)
    {
        Map<String, String> hashMap = createMap();
        int a = getCountTheSameFirstName(hashMap, "Artem");
        int b = getCountTheSameLastName(hashMap, "Name");
        System.out.println(a+" "+b);
    }

    public static Map<String, String> createMap()
    {
        Map<String, String> hashMap = new HashMap<String, String>();
        hashMap.put("Name1", "Artem");
        hashMap.put("Name2", "Artem");
        hashMap.put("Name3", "Anton");
        hashMap.put("Name4", "Anton");
        hashMap.put("Name5", "Liza");
        hashMap.put("Name6", "Katia");
        hashMap.put("Name7", "Marina");
        hashMap.put("Name8", "Marina");
        hashMap.put("Name9", "Misha");
        hashMap.put("Name10", "Liza");
        return  hashMap;
    }

    public static int getCountTheSameFirstName(Map<String, String> map, String name)
    {
        Iterator<Map.Entry<String, String>> iterator = map.entrySet().iterator();
        int count = 0;
        while (iterator.hasNext())
        {
            if(iterator.next().getValue().equals(name))
                count++;
        }
            return count;
    }

    public static int getCountTheSameLastName(Map<String, String> map, String familiya)
    {
        Iterator<Map.Entry<String, String>> iterator = map.entrySet().iterator();
        int count = 0;
        while (iterator.hasNext())
        {
            if(iterator.next().getKey().equals(familiya))
                count++;
        }
        return count;
    }
}
  • ,

level08.lesson08.task03

Не проходит тестирование на сервере без/с main(). Intellij все нормально компилирует и показывает
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

/* Одинаковые имя и фамилия
Создать словарь (Map<String, String>) занести в него десять записей по принципу «Фамилия» - «Имя».
Проверить сколько людей имеют совпадающие с заданным имя или фамилию.
*/

public class Solution
{
    public static void main(String[] args)
    {
        Map<String, String> hashMap = createMap();
        int a = getCountTheSameFirstName(hashMap, "Artem");
        int b = getCountTheSameLastName(hashMap, "Name");
        System.out.println(a+" "+b);
    }

    public static Map<String, String> createMap()
    {
        Map<String, String> hashMap = new HashMap<String, String>(10);
        hashMap.put("Name1", "Artem");
        hashMap.put("Name2", "Artem");
        hashMap.put("Name3", "Anton");
        hashMap.put("Name4", "Anton");
        hashMap.put("Name5", "Liza");
        hashMap.put("Name6", "Katia");
        hashMap.put("Name7", "Marina");
        hashMap.put("Name8", "Marina");
        hashMap.put("Name9", "Misha");
        hashMap.put("Name10", "Liza");
        return  hashMap;
    }

    public static int getCountTheSameFirstName(Map<String, String> map, String name)
    {
        Iterator<Map.Entry<String, String>> iterator = map.entrySet().iterator();
        int count = 0;
        while (iterator.hasNext())
        {
            if(iterator.next().getValue().equals(name))
                count++;
        }
            return count;
    }

    public static int getCountTheSameLastName(Map<String, String> map, String familiya)
    {
        Iterator<Map.Entry<String, String>> iterator = map.entrySet().iterator();
        int count = 0;
        while (iterator.hasNext())
        {
            if(iterator.next().getKey().equals(familiya))
                count++;
        }
        return count;
    }
}

level08.lesson08.task03;

Объясните на по подробнее, что здесь конкретно просят сделать?
что значит " совпадающие с заданным имя или фамилию"?
как я понимаю:
1. создать МАР
2. заполнить его
3. получить количество людей с одинаковыми фамилиями (ключ)
4. получить количество людей с одинаковыми именами (значение)

НО! как мы можем проверить одинаковые фамилии (то бишь ключей), если МАР разрешается заполнят только уникальными ключами?

Задание
/* Одинаковые имя и фамилия
Создать словарь (Map<String, String>) занести в него десять записей по принципу «Фамилия» — «Имя».
Проверить сколько людей имеют совпадающие с заданным имя или фамилию.
*/

level08.lesson08.task05

Добрый день.
Подскажи, в чем ошибка?
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

/* Удалить людей, имеющих одинаковые имена
Создать словарь (Map<String, String>) занести в него десять записей по принципу «фамилия» - «имя».
Удалить людей, имеющих одинаковые имена.
*/

public class Solution
{
    public static HashMap<String, String> createMap()
    {
        HashMap<String, String> map = new HashMap<String, String>();
        map.put("1", "test");
        map.put("2", "test");
        map.put("3", "test");
        map.put("4", "test");
        map.put("4", "test");
        map.put("6", "Cat");
        map.put("7", "test");
        map.put("8", "test");
        map.put("9", "test");
        map.put("10", "test");
        map.put("10", "test");
        return map;

    }

    public static void removeTheFirstNameDuplicates(HashMap<String, String> map)
    {
        Map<String, String> tmpMap = new HashMap<String, String>();

        for(Map.Entry<String, String> entry : map.entrySet()) {
            if (!tmpMap.containsKey(entry.getValue())) {
                tmpMap.put(entry.getValue(), entry.getKey());
            }
        }
        map.clear();
        for(Map.Entry<String, String> entry : tmpMap.entrySet()) {
            map.put(entry.getValue(), entry.getKey());
        }

    //    Iterator st = tmpMap.entrySet().iterator();
     //   while (st.hasNext()) {
     //      Map.Entry pair = (Map.Entry) st.next();
      //     System.out.println(pair.getKey() + " = " + pair.getValue());
     //   }

    }

    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[]){
    //    removeTheFirstNameDuplicates(createMap());
   // }
}


Вывод:
Cat = 6
test = 3
  • ,

level09.lesson11.home09 программа не компилируется на сервере

package com.javarush.test.level09.lesson11.home09;
public class Solution
{
    public static void main(String[] args)
    {
        Map<String, Cat> map = createMap();
        Set<Cat> set = convertMapToSet(map);
        printCatSet(set);
    }

    public static Map<String, Cat> createMap()
    {
        Map<String, Cat> map = new HashMap<String, Cat>();
//        map.put("Vaska", new Cat("Vaska"));
//        map.put("Maska", new Cat("Maska"));
//        map.put("Koshka", new Cat("Koshka"));
//        map.put("Toha", new Cat("Toha"));
//        map.put("Riji", new Cat("Riji"));
//        map.put("Detka", new Cat("Detka"));
//        map.put("Milii", new Cat("Milii"));
//        map.put("Ben", new Cat("Ben"));
//        map.put("Timon", new Cat("Timon"));
//        map.put("Tom", new Cat("Tom"));
        String catName = "Murzik";
        for (int i = 0; i < 10; i++)
        {

            map.put(catName + i,new Cat(catName + i));
        }//Напишите тут ваш код
        return map;
    }

    public static Set<Cat> convertMapToSet(Map<String, Cat> map)
    {
        Set<Cat> set = new HashSet<Cat>(map.values());
//        Iterator<Map.Entry<String, Cat>> iterator = map.entrySet().iterator();
//        while (iterator.hasNext()){
//            Map.Entry<String, Cat> pair = iterator.next();
//            String s = pair.getKey();
//        }
//        for (Map.Entry<String, Cat> pair : map.entrySet())
//        {
//            //Cat s = pair.getValue();
//            set.add(pair.getValue());
//        }//Напишите тут ваш код
        return set;
    }

    public static void printCatSet(Set<Cat> set)
    {
        for (Cat cat:set)
        {
            System.out.println(cat);
        }
    }

    public static class Cat
    {
        private String name;

        public Cat(String name)
        {
            this.name = name;
        }

        public String toString()
        {
            return "Cat "+this.name;
        }
    }


}