gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 19:59:46 24 4
gpt4 key购买 nike

我有一个父对象列表,我想在其中计算子对象的出现次数。我知道我可以使用如下所示的 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)++);
}

最佳答案

你需要你的 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);

关于java - 从父对象创建子对象的映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48377031/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com