Получение ключа объекта с наименьшим значением в hashMap

Некоторые сведения о моей проблеме: у меня есть класс сотрудников с двумя подклассами: сотрудник и клиенты. Оба класса имеют общие поля id и name. Кроме того, у класса Employee есть еще одно поле: заработная плата.

Мне нужно получить ключ hashMap объекта (тип Employee), который получил самую низкую заработную плату... В hashMap есть объекты Employees и Customers с некоторыми различными полями.

Ниже приведен код, который я подготовил:

public String getKeyLowestWage(){
        String k;
        double wage;
        wage = 0;

        Iterator it = ppl.values().iterator();
        while (it.hasNext())
        {
            People s = (People) (it.next() );
            if (s instanceof Employee)
            {
                if ((Employee(getWage()) > wage))
                wage = getWage();
                k = getKey();


            }

        }
        return k;
    }

3 ответа

Решение

Вы можете перебрать entrySet(), который по сути является набором пар ключ-значение:

int wage = 0;
String key = null;
for (Map.Entry<String, People> entry : ppl.entrySet()) {
    People s = entry.getValue();
    if (s instanceof Employee) {
        int empWage = ((Employee) s).getWage();
        if (empWage > wage) {
            wage = empWage;
            key = entry.getKey();
        }
    }
}
return key;

Сначала я думаю, что вам нужны скобки, и вы должны отменить сравнение:

if ((Employee(getWage()) < wage)) {
            wage = getWage();
            k = getKey();
}

И, конечно, вам нужно инициализировать значение заработной платы до максимально возможного значения:

double wage = Double.MAX_VALUE;

Вы тестируете больше, чем, не меньше. Кроме того, вы должны использовать брекеты.

if ((Employee(getWage()) > wage))
    wage = getWage();
    k = getKey();

если вы сделаете отступ правильно

if ((Employee(getWage()) > wage))
    wage = getWage();
k = getKey();

итак

if ((Employee(getWage()) < wage)) {
    wage = getWage();
    k = getKey();
}

должно быть то, что вы просили.

Другие вопросы по тегам