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

添加列表中包含的元素并将它们映射到字符串

苏彭薄
2023-03-14

另一个名字另一个好

SomeName OtherFine

我想创建一个列表 > ,以便创建一个名称列表和对他们的罚款总额

public List<Map<String, Integer>> calculateTotalFine(){

        List<Map<String, Integer>> myMapList = new ArrayList<Map<String, Integer>>();

        ListIterator<CrimeInfo> crimeIterator = list.listIterator();
        while(crimeIterator.hasNext()){
            String key = crimeIterator.next().getName();
            Integer value = crimeIterator.next().getFine();

            if(myMapList.isEmpty()){
                Map<String, Integer> aMap = new HashMap<String, Integer>();
                aMap.put(key, value);
                myMapList.add(aMap);
            }

            else{
                Iterator<Map<String, Integer>> mapIterator = myMapList.iterator();
                while(mapIterator.hasNext()){
                    if(mapIterator.next().containsKey(key)){  //<-- Line no. 29
                        Integer newFine = mapIterator.next().get(key) + value;
                        mapIterator.remove();

                        Map<String, Integer> nMap = new HashMap<String, Integer>();
                        nMap.put(key, newFine);
                        myMapList.add(nMap);
                    }
                    else{
                        Map<String, Integer> newMap = new HashMap<String, Integer>();
                        newMap.put(key, value);
                        myMapList.add(newMap);
                    }
                }
            }
        }
        return myMapList;
    }

有人能告诉我哪里出了问题吗?

共有1个答案

应嘉容
2023-03-14

问题是,您正在迭代mymaplist,但在迭代时却修改了它:

myMapList.add(newMap);

我仍然没有完全理解您正在尝试做什么,但从根本上说,在迭代集合时,您不应该添加到集合中。一种常见的方法是创建一个在迭代过程中修改的新集合,然后(如果需要)在此之后对原始集合执行批量修改。

(正如Titus所说,您还在循环中调用next()两次...您需要更加注意如何使用迭代器,并在可能的情况下使用增强型for循环。)

 类似资料:
  • 在寻找这个问题的答案时,我也遇到过类似的利用LINQ的方法,但是我还不能完全理解它们(并因此实现它们),因为我对它还不熟悉。基本上,我想说的是: 检查列表的任何元素是否包含特定字符串。 如果是,则获取该元素。 老实说,我不知道该如何着手做那件事。我能想出的是这个(当然不工作): 我知道为什么它不起作用: 不返回,因为它将检查列表的整个元素是否与我指定的字符串匹配 不会找到匹配项,因为它将再次检查与

  • 问题内容: 我需要枚举包中的所有类并将它们添加到列表中。单个类的非动态版本如下所示: 如何动态地将所有类添加到包及其所有子包中? 问题答案: 有关更加健壮和功能丰富的类路径扫描器,请参见https://github.com/classgraph/classgraph。我建议您先阅读我的代码片段以获得高水平的理解,然后再使用lukehutch的工具进行生产。

  • 问题内容: 我试图将字符串数组作为参数传递给Wetland类的构造函数;我不明白如何将字符串数组的元素添加到字符串数组列表。 问题答案: 您已经具有内置方法:- 注 : -您应该使用没有。 返回一个不同的-> ,不能将其类型转换为。 然后,您将不得不使用方法,这不是很好。所以就用 注意 :-返回的列表是固定大小的列表。如果要向列表中添加某些内容,则需要创建另一个列表,并用于向其中添加元素。所以,那

  • 我有一个类型的变量,其中item如下所示: 我想将其重新排序为,其中键是customerId,然后值是具有该客户ID的所有项的列表。

  • 我从消防队拿到了我的文件。目前我在列表中有以下内容: 然后,在下面的方法中,我转换这个列表以放入一个具有所需格式的地图。

  • 如何将字符串映射到列表,并将列表映射到字符串? 考虑到我们有以下班级 在Dozer和Orika中,我们可以使用以下代码行轻松映射 如何在MapStruct中进行相同类型的映射?在哪里可以找到有关mapstruct的更多示例?