gpt4 book ai didi

java - 从具有复合键值的 HashMap 中删除键

转载 作者:行者123 更新时间:2023-12-02 00:48:16 25 4
gpt4 key购买 nike

嘿,大家目前在从 HashMap 中删除重复项方面遇到问题。

一些背景:

我的 HashMap 采用这种格式 Map<CompositeKeyBean,ValueBean> .

CompositeKeyBean格式为(String ID, String hashvalue) ;

ValueBean是一个对象。

所以,如果我有一个包含如下值的 HashMap :

(ID:1,HashValue:123),Obj1
(ID:1,HashValue:234),Obj1
(ID:1,HashValue:345),Obj1

我需要删除重复的键,并且只包含具有唯一 ID 的项目。目前我已经想出了这个,但它似乎不起作用,我很确定我做错了什么。

for (Map.Entry<CompositeKeyBean, ReportDataBean> entry : list.entrySet())
{
String idvalue = entry.getKey().getCompositeKeyList().get(0);
for(int i = 1; i < list.size();i++)
{
if(list.keySet().contains(idvalue))
{
list.remove(i);
}
}
}

最佳答案

我对此的解决方案是首先声明另一个 Map,它将用于保存某个键在原始 Map 中出现的次数。第二次,您可以迭代相同的映射条目集并使用声明的附加映射作为引用来删除重复项。

Map<String, Integer> numberOfInstanceMap = new HashMap<String, Integer>(); //temporary placeholder

for (Map.Entry<CompositeKeyBean, ReportDataBean> entry : list.entrySet())
{
String idvalue = entry.getKey().getCompositeKeyList().get(0);
if(!numberOfInstanceMap.containsKey(idvalue)) {
numberOfInstanceMap.put(idvalue, 1); //initialize the key to 1
} else {
numberOfInstanceMap.replace(idValue, numberOfInstanceMap.get(idValue) + 1); //add 1 to the existing value of the key
}
}

for (Map.Entry<CompositeKeyBean, ReportDataBean> entry : list.entrySet())
{
String idvalue = entry.getKey().getCompositeKeyList().get(0);
Integer i = numberOfInstanceMap.get(idValue);
if(i>1) { //remove duplicate if the key exists more than once
list.remove(idValue);
}
}

关于java - 从具有复合键值的 HashMap 中删除键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57881365/

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