Только для богачей

  • 5
  • Недоступна
Наш заказчик — казино «Риге-Тау» с планеты Диблублублу. Крайне заносчивые ребята, но платят хорошо. Они заказали нам сделать программу автоматической рассылки писем потенциальным клиентам. Не пугайтесь, джуниору (вам) поручена простая задача: создать словарь типа «фамилия»-«зарплата» и удалить из него тех, у кого зарплата ниже 500 кредитов.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (244)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
artbunny
Уровень 15, Санкт-Петербург, Россия
11 мая, 20:40
Практики ради, запоминания для решил задачу четырьмя разными способами: 1. Через создание копии Map (создал копию; создал счетчик; циклом в копии сравнил значения с оригинальным списком и одновременно на условие <500; увеличил счетчик; в копии проверил, увеличился ли счетчик и удалил данные; вернул счетчик к 0). 8 строк, 1 новая переменная count, копия Map 👍 2. Через создание списка ArrayList (логика та же практически: создал список только по значениям из Map; ввел некую строку stringTemp со значением ""; в цикле по списку запустил цикл перебора пар ключ-значение Map, где по условию сравнил текущее значение из списка со значением из Map и на соответствие условию <500; при выполнении условия меняю stringTemp на значение текущего ключа и сразу же выхожу через break во внешний цикл, где по условию непустой строки удаляю данные из Map). 9 строк, 1 новая переменная stringTemp, список значений, break👎 3. Через создание списка Set (создал список Set; циклом перебрал пары Map, где при условии значений <500 в список Set добавлял ключи; через перебор добавленных значений в Set удалил данные из Map). 5 строк, переменная string вводимая в цикле for, список Set👍👍 4. Через итератор (Честно говоря, я еще не знаю устройство итератора внутри, но что-то мне подсказывает, что оно похоже на создание копии, чтобы перебор делать в одном месте, а удаление в другом. Тем не менее цикл while в итераторе позволяет сразу из проверить условие значений <500 и сразу же удалить данные по ключу). 4 строки, отсутствие новых переменных, итератор👍👍👍 Решения через removeif пока не рассматриваю, ибо не знаю, что за зверь такой.
Максим Белоусов
Уровень 18, Москва, Россия
27 июня 2021, 17:26
Я как то привык через итератор решать. Что быстрее итератор или создание копии мапы?
Van Rar
Уровень 18, Zelenograd
1 октября 2021, 05:06
после доп лекции про ArrayList и LinkedList, я понял что что бы на такие вопросы отвечать, лучше тестить)) хотя нарна это можно и загуглить исходя из того какая сложность у итератора и у копирования
Сергей
Уровень 9, Москва, Россия
20 апреля 2021, 18:01
Всем привет, подскажите что не так? Не выполняется последнее условие.
package com.javarush.task.task08.task0818;

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

/*
Только для богачей
*/

public class Solution {
    public static Map<String, Integer> createMap() {
        Map<String, Integer> map = new HashMap();

        map.put("Иванов1", 150);
        map.put("Иванов2", 750);
        map.put("Иванов3", 800);
        map.put("Иванов4", 200);
        map.put("Иванов5", 100);
        map.put("Иванов6", 340);
        map.put("Иванов7", 500);
        map.put("Иванов8", 490);
        map.put("Иванов9", 499);
        map.put("Иванов10", 580);
        return map;//напишите тут ваш код
    }

    public static void removeItemFromMap(Map<String, Integer> map) {
        for (Map.Entry<String, Integer> entry : map.entrySet())
        {
            String key = entry.getKey();
            int value = entry.getValue();

            if (value < 500)
            {
                map.remove(key, value);
            }
        }//напишите тут ваш код
    }

    public static void main(String[] args) {

    }
}
Евгений
Уровень 20, Великобритания
30 июля 2021, 19:22
remove (key) надо, удаляется по ключу. Так как ключи все разные. Так же у тебя итерация идёт через map, соответственно при удалении, цикл сбивается. Тебе нужно создать копию - через неё делать итерацию. А удалять из оригинальной map.
Евгений
Уровень 9
8 апреля 2021, 18:22
Обьясните дураку почему не работает?
public static int getCountTheSameFirstName(Map<String, String> map, String name){
       Map<String, String> copyFirstName = new HashMap<>(map);
       int count = 0;
       for (Map.Entry<String, String> pair : copyFirstName.entrySet()){
           if (pair.getKey() == pair.getKey()){
               count++;
           }
       }
       return count;
   }

   public static int getCountTheSameLastName(Map<String, String> map, String lastName){
       Map<String, String> copyLastName = new HashMap<>(map);
       int count = 0;
       for (Map.Entry<String, String> pair1 : copyLastName.entrySet()){
           if (pair1.getValue() == pair1.getValue()){
               count++;
           }
       }
       return count;
   }
Dim
Уровень 16, Житомир, Украина
10 апреля 2021, 18:30
насколько я понимаю, то в первом методе ты принимаешь в кач-ве аргументов мапу и еще стринг, который нигде не используется. Зачем? тоже самое и во втором. далее
pair.getKey() == pair.getKey()
как по мне, то бред, у нас ключи всегда уникальны. ты проверяешь ничто. ну и тоже самое во втором методе. его можно изменить и сравнивать Value новой мапы с Value начальной мапы и уже потом увеличивать счетчик, если есть совпадения.
Dim
Уровень 16, Житомир, Украина
28 марта 2021, 11:33
подскажите зачем нам создавать новый словарь и передавать в него значения старого? почему мы не можем пользоваться старым словарем? не могу понять
Dim
Уровень 16, Житомир, Украина
28 марта 2021, 16:29
решил через итератор и подсказки) но все равно не понял почему нам надо 2й словарь, если решаем без итератора
ARCOS
Уровень 19, Москва, Россия
9 апреля 2021, 16:49
насколько я понял, нельзя напрямую менять коллекцию при итерации, для этого надо создавать 2-й словарь.
Александр
Уровень 41, Санкт-Петербург
25 марта 2021, 18:43
Взял логику решения из задачи про летние месяца, прошло)
Map<String, Integer> copy = new HashMap<>(map);
       for (Map.Entry<String, Integer> value : copy.entrySet()) {
         String zn = value.getKey();
           int zp = value.getValue();
           if (zp<500) {
              map.remove(zn,zp);
Игорь
Уровень 11, Тверь, Россия
2 марта 2021, 14:00
После предыдущих задач эта просто расслабуха!
Mister Khokhma
Уровень 20, Кемерово
25 февраля 2021, 14:24
Подскажите пожалуйста, почему в методе removeItemFromMap создается новый мап?
Alexander Mul
Уровень 25, Warsaw
11 февраля 2021, 12:34
Изначально пришло в голову решить с помощью removeIf ArrayList<Integer> copyMapValues = new ArrayList<>(map.values()); copyMapValues.removeIf(x -> x < 500); Но потом передумал и просто решил с помощью метода удаления имен из задачи "Нам повторы не нужны" только переделал немного
Дмитрий
Уровень 15
22 февраля 2021, 06:28
А можно ведь было просто получить коллекцию значений мапы и на неё использовать removeIf
map.values().removeIf(v -> v < 500)
Alexander Mul
Уровень 25, Warsaw
22 февраля 2021, 11:35
Блин я был так близко)) аха) спасибо дошло)))😀
Дмитрий
Уровень 15
22 февраля 2021, 13:35
Как оно там на 12 ?=) Учитывая когда ты здесь был, то прошёл до туда довольно быстро...По сколько часов уделяешь джаварашу и читаешь что то ещё ?
Alexander Mul
Уровень 25, Warsaw
22 февраля 2021, 18:48
Всё максимальное свободное время Бывает там 2- 3 часа по выходным вообще могу и по 6-8 сидеть потом перерыв и потом ещё часа 2 зарядить но это бывает редко, стараюсь в общем Там дальше к стати легко будет ну особо пока что сложно Шмидта посматриваю когда нужно использую его как справочник в основном из теории пока и тут хватает статей куча сдесь)
Дмитрий
Уровень 15
23 февраля 2021, 04:39
Да, хороший напор. Хотелось чтоб и дальше такой же был =) На счёт книги посоветовали тут или ещё может где ?
Alexander Mul
Уровень 25, Warsaw
23 февраля 2021, 15:43
Тут посоветовали Просто в комментах увидел где-то только не Шмидт а Шильдт, Java_Polnoe_rukovodstvo_-_Gerbert_Shildt_10-e_izdanie
Дмитрий
Уровень 15
23 февраля 2021, 19:13
Спасибо большое =) Удачи в твоём прекрасном деле, ты комменты где нить по пути на уровнях оставляй, авось догоню =)
Alexander Mul
Уровень 25, Warsaw
23 февраля 2021, 19:21
Ok) и тебе удачи)
Andrew
Уровень 16, Москва, Россия
17 января 2021, 19:22
Задача решается элементарно путем незначительного изменения метода удаления имен из задачи "Нам повторы не нужны")