我有一个父对象列表,我想要计算子对象的出现次数。我知道我可以使用如下所示的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)++);
}
答案 0 :(得分:5)
您需要Map
的密钥为Class
(Parent
个实例的类型):
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);