尝试从其他列表中删除项目列表时出现UnsupportedOperationException

时间:2015-06-18 11:40:39

标签: java listiterator

我已编码如下,我知道有什么问题,但validDatesIterator.remove()给了我UnsupportedOperationException异常。使用java 1.6

List<Integer> validDates = Arrays.asList(26,27,28,1,2,3,4);
    List<Integer> daysToBeRemoved = Arrays.asList(1,2); 
    Iterator<Integer> validDatesIterator = validDates.listIterator();
    while(validDatesIterator.hasNext()) {
        Integer curValue = validDatesIterator.next();
        for(Integer dayToRemove:daysToBeRemoved) {
            if(curValue.equals(dayToRemove)) {
                validDatesIterator.remove();
                break;
            }
        }
    }

此外,当我调试有效日期时(curValue最初它给出27而不是26)从元素27开始,而不是26。

可能是一个重复的问题,但搜索了很多,dint找到了这个。请帮忙。

2 个答案:

答案 0 :(得分:1)

Arrays.asList返回Arrays.ArrayList,这是一个不支持删除元素的List实现。使用

List<Integer> validDates = new ArrayList<>(Arrays.asList(26,27,28,1,2,3,4));

答案 1 :(得分:1)

第一个问题:Arrays.asList()返回一个(基本上)不可修改的列表。将它传递给普通List的构造函数。

第二个问题:你重新发明了轮子。

试试这个:

List<Integer> validDates = new ArrayList<>(Arrays.asList(26,27,28,1,2,3,4));
List<Integer> daysToBeRemoved = Arrays.asList(1,2);

validDates.removeAll(daysToBeRemoved);