Java List集合取交集 使用retainall 报错:UnsupportedOperationException

代码如下:

String[] nameArrays = fileLabelNames.split(",");
//查询所有的文件标签
List<FileLabel> fileLabelList = this.selectList(new EntityWrapper<FileLabel>().eq("type", type).eq("status", 1));
List<String> hasSaved = new ArrayList<>();
for (FileLabel fl: fileLabelList) {
	hasSaved.add(fl.getTypeName());
}
List<String> newFileLabel = Arrays.asList(nameArrays);
List<String> saveFileLabels = new ArrayList<>(newFileLabel);
// 得到已经保存的和传递过来的数据的交集【此时 newFileLabel 中已经是两个集合的交集了】
newFileLabel.retainAll(hasSaved);// 【***执行到这里报错了***】
// 得到两个集合的差集,所剩下的就是所要保存的
saveFileLabels.removeAll(newFileLabel);
List<FileLabel> newSave = new ArrayList<>();

出错原因:

  Arrays类的内部类ArrayList,和平时new ArrayList()不是同一个 所以对数据进行操作时候需要转为ArrayList对象;【断点调试的时候可以看到这个

newFileLabel 是个内部类对象】

解决办法:

将 List<String> newFileLabel = Arrays.asList(nameArrays); 

修改为:List<String> newFileLabel = new ArrayList<>(Arrays.asList(nameArrays));

 

posted @ 2020-06-23 19:24  寻水的鱼001  阅读(1065)  评论(0编辑  收藏  举报