我有一个ArrayList(上面代码中的File)的问题。这个arraylist由位于sd中的文件组成。问题是我可以有重复(相同的图像,但在不同的路径进入SD,所以相同的文件名但不同的路径),我想删除它们。所以我使用这段代码:
ArrayList<File> removedDuplicates = new ArrayList<File>();
for (int i = 0; i < File.size(); i++) {
if (!removedDuplicates.contains(File.get(i))) {
removedDuplicates.add(File.get(i));
}
}
但它不起作用,我猜因为文件列表的contains()查看文件路径而不是文件名。这是真的吗?我怎样才能解决我的问题?我也尝试过:
ArrayList<File> removedDuplicates = new ArrayList<File>();
for (int i = 0; i < File.size(); i++) {
if (!removedDuplicates.contains(File.get(i).getName())) {
removedDuplicates.add(File.get(i));
}
}
但仍然不起作用。感谢
答案 0 :(得分:2)
getName的类型是String,而ArrayList中的对象类型是File,所以你永远不会得到同样的东西。
您想要比较ArrayList中的名称。
for(File f : files){
String fName = f.getName();
boolean found = false;
for(File f2 : removedDuplicates){
if(f2.getName().equals(fName)){
found = true;
break;
}
}
if(!found){
removedDuplicates.add(f);
}
}
答案 1 :(得分:1)
非常简单。 PS:经过测试的代码
Map<String, File> removedDuplicatesMap = new HashMap<String, File>();
for (int i = 0; i < files.size(); i++) {
String filePath = files.get(i).getAbsolutePath();
String filename = filePath.substring(filePath.lastIndexOf(System
.getProperty("file.separator")));
removedDuplicatesMap.put(filename, files.get(i));
}
ArrayList<File> removedDuplicates = new ArrayList<File>(
removedDuplicatesMap.values());
答案 2 :(得分:0)
试试这个:
ArrayList<File> removedDuplicates = new ArrayList<File>();
File temp;
for (int i = 0; i < File.size(); i++) {
temp=new File(File.get(i).getAbsolutePath());
if (!removedDuplicates.contains(temp)) {
removedDuplicates.add(File.get(i));
}
}