从父对象创建子对象的映射

时间:2018-01-22 08:04:15

标签: java

我有一个父对象列表,我想要计算子对象的出现次数。我知道我可以使用如下所示的instanceof运算符来计算每个对象类型的出现次数。但是,我想使用HashMap而不是if-else分支。我尝试创建Map<? extends Parent, Integer>但它没有用。有什么建议吗?

class Parent {
// parent class
}

class ChildA extends Parent {
 // child class
}

class ChildB extends Parent {
 // child class
}

class ChildC extends Parent{
 // child class
}

int countChildA = 0;
int countChildB = 0;
int countChildC = 0;
for (Parent child : children)
{
    if (child instanceof ChildA)
    {
        countChildA++;
    }
    else if (child instanceof ChildB)
    {
        countChildB++;
    }
    else if (child instanceOf ChildC)
    {
        countChildC++;
    }
}

// what I'm looking for
Map<? extends Parent, Integer> map = new HashMap<>();
for (Parent child : children)
{
    map.put(child, child.getValue(child)++);
}

1 个答案:

答案 0 :(得分:5)

您需要Map的密钥为ClassParent个实例的类型):

Map<Class<? extends Parent>, Integer> map = new HashMap<>();

而不是:

map.put(child, child.getValue (child)++);

使用:

if (map.containsKey(child.getClass())) {
    map.put(child.getClass(), map.get (child.getClass())+1);
} else {
    map.put(child.getClass(), 1);
}

map.put(child.getClass(), map.getOrDefault(child.getClass(), 0) + 1);