寻找重复文件的路径集合
/* 没有什么特别的技巧,就是用map存储相同内容的路径,核心就是getOrDefault()方法 注意步骤,想清楚思路 */ //记录结果 Map<String,ArrayList> map = new HashMap<>(); for (String path : paths) { //把根路径和各个文件分开 String[] files = path.split(" "); //遍历每个文件,有两个任务,一是存下改文件内容,二是把该文件的路径记录下来 for (int i = 1; i < files.length; i++) { String file = files[i]; //记录文件路径的容器,由于要不断添加,所以选择可以改变的StringBulider StringBuilder temp = new StringBuilder(); //添加根路径 temp.append(files[0]); //别忘了跟路径后边要有个/ temp.append('/'); //记录从什么地方开始内容的开始 int j; for (j= 0; j < file.length(); j++) { if (file.charAt(j)!='(') { //只要不是内容开始的标志('(')就把路径添加 temp.append(file.charAt(j)); } else break; } //记录下内容 String con = file.substring(j+1,file.length()-1); //得到该内容的list,如果没有的话就新建一个 ArrayList list = map.getOrDefault(con,new ArrayList()); //添加上新的相同内容路径 list.add(new String(temp)); //重新加入到map map.put(con,list); } } //下面的工作的就是把map中存的list添加到结果中 List<List<String>> res = new ArrayList<>(); for (String s: map.keySet()) { //注意这里有个小陷阱,如果没有重复的话,就不添加这个list if (map.get(s).size()>1) res.add(map.get(s)); } return res;