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));

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM