代碼如下:
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));