java - 如何避免以下代码中的Java.util.IllegalStateException?

标签 java exception collections iterator arraylist

我有一个包含重复值的整数列表。我需要做的是找到重复的整数,添加它们的值,然后通过删除找到的重复项将结果添加到列表中。这是我正在做的事情:

List<Integer> list1 = new ArrayList<Integer>();
    list1.add(2);
    list1.add(5);
    list1.add(3);
    list1.add(5);
    list1.add(4);

    List<Integer> list2 = new ArrayList<Integer>();
    Iterator<Integer> it = list1.iterator();
    while (it.hasNext()) {
        Integer int1 = it.next();
        if (list2.isEmpty()) {
            list2.add(int1);
            it.remove();
        } else {
            ListIterator<Integer> it2 = list2.listIterator();
            while (it2.hasNext()) {
                Integer int2 = it2.next(); 
                if (int2 != int1) {
                    it2.add(int1);
                    it.remove();// I get exception here

                } else {                        
                    it2.remove();
                    it.remove();
                    Integer newint = int1 + int2;
                    it2.add(newint);
                }                   
            }
        }
    }       
    for(Integer in : list2){
        System.out.println(in);
    }

输出应该类似于
2<br/> 10<br/> 3<br/> 4

感谢您的宝贵时间。

最佳答案

正如其他发帖者所说,迭代时无法删除。尽管存在“技巧”,但在迭代时弄乱集合肯定会导致奇怪的运行时错误。

无论如何,你在解决这个问题上太过努力了。

这是一个快速但肮脏的解决方案,其中包含一小部分代码:

private List<Integer> sumAndUniqDuplicates(List<Integer> list) {
    LinkedHashMap<Integer, Integer> lookup = new LinkedHashMap<Integer, Integer>();
    for (Integer value : list) {
        Integer prevValue = lookup.get(value);
        prevValue = (prevValue == null) ? 0 : prevValue;
        lookup.put(value, prevValue + value);
    }
    return new ArrayList<Integer>(lookup.values());
}

关于java - 如何避免以下代码中的Java.util.IllegalStateException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7654445/

相关文章:

java - 如何使用通配符遍历这个通用列表?

java - 当 HashSet 的初始容量(即 16)被填满时,新容量是如何计算的?公式是什么?

java.sql.SQLException : [Microsoft][ODBC Microsoft Access Driver] Too few parameters. 预期 11

java - 我的 ActionBar 图标不可点击

java - 使用 JPA2 时如何对 EJB 进行单元测试?

c# - 如果发生异常,则退出函数/方法

java - Android SSL - 不适用于 API 7

为静态方法抛出 java.lang.NoClassDefFoundError 而不是为静态成员抛出

c - 我的 C 程序的浮点异常

java - 使用 values() 方法从 LinkedHashMap 获取条目的 LinkedList