获取hashMap中具有最小值的对象的键

时间:2014-12-26 17:54:05

标签: java hashmap

关于我的问题的一些背景知识: 我有一个包含两个子类的People类:Employee和Customers。两个类共享id和name字段。此外,Employee类还有另一个字段:salary。

我需要得到最低工资的对象(类型为Employee)的hashMap键...在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 个答案:

答案 0 :(得分:1)

你的测试大于,不小于。此外,你应该使用大括号。

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

如果你正确缩进

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

所以,像

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

应该是你要求的。

答案 1 :(得分:1)

首先我认为你需要一些括号,你应该反转比较:

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

当然,您需要将工资价值初始化为最大可能值:

double wage = Double.MAX_VALUE;

答案 2 :(得分:1)

你可以迭代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;