当我删除 List<List<String>> 中特定索引处的元素时出现 UnsupportedOperationException?

Getting UnsupportedOperationException when i remove elements at particular index in List<List<String>>?

我有 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"]

实际上这个 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

谁能帮我解决这个问题?

虽然我没有足够的可用信息,但我怀疑返回的列表可能是固定大小的(或无法以其他方式修改)。一个例子是我们从 Arrays.asList 得到的列表,不能 add/remove anything.We 不能在结构上修改这个列表。

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

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

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

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