当前位置: 首页 > 知识库问答 >
问题:

从Java LinkedHashMap中删除条目

艾文斌
2023-03-14

我必须比较两个Excel文件(数据不同)并创建两个新的Excel表:

  1. 表1包含所有匹配的条目
  2. 表2包含所有不匹配的条目

因此,我迭代两个Excel文件,并将匹配项存储在LinkedHashMap中。在第二个LinkedHashMap中,我存储Excel文件中的所有条目。通过这两张地图,我想识别三角洲。

为了识别增量,我比较了两个列表,现在想要从完整列表中删除所有条目,如果条目已经与匹配的条目在列表中。

我尝试了不同的解决方案-所有的结果都是代码正在运行,但从来没有一个条目被真正删除。有人能帮忙吗?

这是我的密码:

// This code fills both Maps
LinkedHashMap<String, String>  liste_matches = new LinkedHashMap<String, String> ();    
LinkedHashMap<String, String>  liste_complete = new LinkedHashMap<String, String> ();   

while(worksheet1.getLastRowNum() >= j){
    liste_complete.put(String.valueOf(worksheet1.getRow(j).getCell(18)), "");

    // Counter for loop, loops trough Telekom datasets
    int i = 1;

    while(worksheet2.getLastRowNum() >= i)
    {       
        if(String.valueOf(worksheet1.getRow(j).getCell(18)).equals(String.valueOf(worksheet2.getRow(i).getCell(9))))
        {
            if(!liste_matches.containsKey(String.valueOf(worksheet1.getRow(j).getCell(18)))){
                liste_matches.put(String.valueOf(worksheet1.getRow(j).getCell(18)), "");
            }
        }
    }

    // build Excel table
}

这是我的代码,我用来比较两个列表,并从已经liste_matches的liste_complete中删除所有条目。

我第一次尝试了这个(我在第二次尝试时插入了ArrayList…)。它正在运行,但对列表没有任何影响。ArrayList=新建ArrayList();

for(Map.Entry<String,String> keyDelta : liste_complete.entrySet())
{
    for(Map.Entry<String,String> key : liste_matches.entrySet()){
        if(keyDelta.equals(key)){
            liste_complete.remove(keyDelta);
            list.add(entry.getValue());
        }
    }   
}

之后,我尝试了这个方法,但对列表也没有任何影响:for(int c=0;c

我在StackOverflow中找到了这个解决方案,但它返回java.lang.IllegalStateExcture

Iterator<Map.Entry<String,String>> iter = liste_complete.entrySet().iterator();
while (iter.hasNext()) {
    Map.Entry<String,String> entry = iter.next();
    for(Map.Entry<String,String> key : liste_matches.entrySet()){
        if(key.getValue().equalsIgnoreCase(entry.getValue())){
            iter.remove();

        }               
    }   
}

共有2个答案

长孙阳焱
2023-03-14

非常感谢你的提示。

我已经调试了代码,但不明白这个问题——我认为这确实是复杂输入数据的问题。

我没有通过键比较键。getKey()但仅使用,这似乎会导致比较中出现问题。无论如何,我的代码运行时使用以下代码段:

            for(Map.Entry<String,String> keyDelta : liste_Complete.entrySet()){

            if(!liste.containsKey(keyDelta.getKey())){
                delta_liste.put(String.valueOf(keyDelta), "");
            }
        }
姬慎之
2023-03-14

AFAIK您不能从正在迭代的列表中删除元素。我建议你2个解决方案:

>

for worksheet1 row
  for worksheet2 row
      if(match)
         liste_matches.add(...)
      else
         liste_non_matches.add(...)

这样,您就不必在事后删除元素。

 类似资料:
  • 问题内容: 这应该很容易,但是我很难过。基本上,我在matplotlib中有一个子图,每次调用一个函数时,我都会绘制一个六边形图,但是每次调用该函数时,都会得到一个新的颜色条,所以我真正想做的就是更新颜色条。不幸的是,这似乎不起作用,因为通过subplot.hexbin重新创建了附加了颜色条的对象。 我现在在这个烦人的地方,尝试完全删除颜色条轴,然后重新创建它。不幸的是,当我删除颜色条轴时,子图轴

  • 我在这个问题上挣扎了一段时间,我似乎没有找到任何答案。 谢了。

  • 我的代码有点纠结。我已经搜索并尝试了许多方法。我的目标是删除Firebase之前提供给我的应用程序的条目,Firebase数据来自嵌入式设备。我想替换android应用程序中的值。 Firebase工作正常,应用程序将显示Firebase提供的新值,但不会删除以前的条目。 我还有很多事情要做,但想在继续前进之前解决基础问题。 因此,OnChildChanged基本上会显示新的firebase条目,

  • 问题内容: 我错误地 从Windows计算机中 删除了Java文件夹 。 现在我在各种插件以及所有插件中都遇到了问题,它要求我 下载最新的JRE 。当我尝试这样做时,它说 JRE已经存在 ,您是否要删除旧的JRE并安装新的JRE?我说是,然后给我错误“ 1723”。 简而言之, JRE不会被卸载 。 我重新安装了Java SDK,但是仍然无法正常工作。我再次卸载了Java SDK,并尝试卸载JRE

  • 问题内容: 我目前正在使用Hibernate Envers。 如何删除审核表中与我要删除的实体相关的条目?我的实体与其他实体没有任何关系。 我发现必须在自定义侦听器的方法中执行此操作: 我已经阅读了文档,论坛以及许多内容,但我无法弄清楚。也许这是不可能的,我不知道。 有人做过吗? 问题答案: 好吧,对于那些想知道的人,我已经完成了50%。 感谢Hibernate Envers的创建者Adam Wa

  • 问题内容: 我需要编写一个简单的函数,该函数将删除包含类对象的所有条目。我编写了函数,但是如果的大小大于1 ,则该函数将不起作用。 编辑#1 错误消息如下: 问题答案: 该代码无法编译。什么啊 无论如何,如果要在迭代时删除元素,则必须使用迭代器的remove方法进行操作: 不过,您的方法可以做到。更直接,更有效。

  • 我在Java中有一个< code>HashMap: 我需要的是删除重复条目(“1”,1)[当键和值都重复时]。我搜索并只找到了“如何删除重复的键/值”。有人能帮忙吗?

  • 我是使用Kafka的新手,我有一个问题。如果我知道主题、偏移量和分区,我可以只删除一条消息吗?如果没有,还有什么其他选择吗?