当我删除List <list <string>&gt;中的特定索引处的元素时获取UnsupportedOperationException?

时间:2015-09-22 08:46:05

标签: java hibernate list arraylist unsupportedoperation

我以这种方式获得List<List<String>>数据,

List<List<String>> repdata = [
    ["1185","R","4t","G","06","L","GT","04309","2546","2015","CF FE","01H1","20","23840","FF20"],
    ["1192","R","11t","H","06","L","SA","04772","8345","2015","BZ C8 FE","01D6","13","33390","LC13"]]

我想删除内部列表中索引14处的值。

ex:在此内部列表数据中

[["1185","R","4t","G","06","L","GT","04309","2546","2015","CF FE","01H1","20","23840","FF20"]]

我想删除FF20,

必须对List<List<String>> repdata中的所有内部列表重复此操作。

所以,我的最后List<List<String>>就是这样,

List<List<String>> repdata = [
["1185","R","4t","G","06","L","GT","04309","2546","2015","CF FE","01H1","FF20","23840"],
["1192","R","11t","H","06","L","SA","04772","8345","2015","BZ C8 FE","01D6","13","33390"]

实际上来自hibernate的这个List<List<String>> repdata is = criteria.list()。这是转化的方式,

criteria.setResultTransformer(Transformers.TO_LIST);

我厌倦了这种方式,

List<List<String>> repdata = cr.list();
        for( List<String> list: repdata ){
            if( list.size() > 14){                              
                list.remove(14);
            }           
        }

但我不断得到UnsupportedOperationException

有谁可以帮我解决这个问题?

2 个答案:

答案 0 :(得分:1)

虽然我没有足够的可用信息,但我怀疑返回的列表可能是固定大小(或以其他方式不可修改)。一个例子是我们从Arrays.asList获得的列表,它无法添加/删除任何内容。我们无法在结构上修改此列表。

解决方案可能是使用当前列表中的项初始化列表实现。 LinkedList支持更快的删除,可能是合适的。类似的东西:

List<String> list = new LinkedList<String>(Arrays.asList(your_list));

如果符合您的要求,您也可以使用ArrayList

答案 1 :(得分:0)

我们不应该使用List的remove方法。相反,使用迭代器遍历它并使用迭代器自己的remove方法很有用。因为当使用list的remove方法时,将抛出ConcurrentModificationException。