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

如何解决Java中对一个庞大的Arraylist进行迭代时并发修改异常

龙洛城
2023-03-14

我正在从数据库resultset获取一个巨大的ArrayList,并尝试在Java中迭代它(尝试从中获取值)。在对其进行迭代时,我在一个特定的行上得到一个concurrentModificationException我尝试使用各种解决方案,但却一次又一次地得到相同的错误,我在下面发布代码

    @Override
public String populateCSVReportFormyHeader(InvoiceSearchDto invoiceSearchDto) throws IOException {
    
    List<(MyHeaderEntity>  myHeaderEntityList = myCustomRepository.fetchmyHeaderDetails(getParam(invoiceSearchDto));
    StringWriter sw = new StringWriter();
    try (CSVPrinter csvPrinter = new CSVPrinter(sw,  CSVFormat.DEFAULT.withHeader("record Number"," Vendor Number",
            "Doc Name","Print",.....
            ) 
        )){
        for (MyHeaderEntity myDto : new ArrayList<MyHeaderEntity>(myHeaderEntityList)) {
             try {
                csvPrinter.printRecord(
                        myDto.getSom_num().toString(), //getting concurrent Modification exception on this line 
                        myDto.getOPc_vendor(),
                        myDto.getSt_name(),
                        myDto.getSH().toString(),
                        myDto.getDume(),
                        "'"+myDto.getHume()+"'",
                        ......

       );

我在myDTo.getsom_num().ToString()这一行上遇到异常。有谁能帮我解决这个问题吗

共有1个答案

郭华美
2023-03-14

为什么要用下面的行实例化一个新列表?您是否从循环中的列表中删除任何元素?

尝试使用迭代器而不是for循环,并避免在循环内部使用remove。

for (MyHeaderEntity myDto : new ArrayList<MyHeaderEntity>(myHeaderEntityList))
 类似资料:
  • 当我使用temp=iterator.next()时,sort方法会导致并发修改错误。你能帮我解决并发修改错误吗。我给出了整个类的代码,但我只是尝试完成sort方法。事先谢谢你的帮助。 我必须对ArrayList中的所有数组进行排序。

  • 我对java相当陌生,实际上我正在编写一个键盘记录器,并让它定期写入文件。每当用户按下某个键时,它都会实例化一个NativeKeyEvent,该事件调用“param string()”并将信息作为字符串添加到下面的arraylist中... 然后,在每一个间隔,字符串数组被传递,并被写入下面的TimerTask线程中的文件。 行'str=iterator.next().tostring();‘然后

  • 我试图从中删除一些元素,同时像这样迭代它: 当然,当尝试在迭代的同时从列表中删除项时,我会得到一个。有没有一些简单的解决方案来解决这个问题?

  • 问题内容: 我收集了约100万条记录,每个记录有20个字段。我需要更新每个记录(文档)中的整数字段,并向该字段随机分配1或2 。在游标遍历整个集合时如何执行此操作?第二次搜索MongoDB已经找到的对象只是为了能够更新它似乎不是一个好主意: 如何有效地更新具有不同值的巨大MongoDB集合的每个文档中的字段? 问题答案: 您的方法基本上是正确的。但是,我不会将这样的集合视为“巨大的”。您可以从sh

  • 问题内容: 我正在尝试遍历: …并提取中的每个元素。这是我的方法: 这里的问题是对的每次调用都会从中删除元素,从而修改其大小,从而导致以下错误: 那么…当元素动态变化时,我该如何遍历其中的元素呢? 问题答案: 其他人则提到了正确的解决方案,而没有实际阐明。所以这里是: 另外,如果您想安全地在assign函数中更改映射,则需要传入迭代器(只能使用remove函数,并且只能使用一次)或条目来更改值。

  • 问题内容: 问题发生在 包含该行的代码位于 所有这一切都在里面,这里是一个 当我触摸时,它可能会激活,这将创建另一个具有不同属性的属性,这些属性会从屏幕上掉下来并在不到一秒钟的时间内销毁自己。这是我创建粒子效果的方式。我们可以将其称为“粒子” ,就像构造函数中的参数一样。 一切正常,直到我添加另一个main为止。现在,我同时在屏幕上有两个,如果我触摸最新的,它可以正常工作并启动粒子。 但是,如果我