当我删除 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。
我有 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。