0

ArrayList (上記のコードのファイル) に問題があります。この 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));
    }
}

それでもうまくいきません。ありがとう

4

3 に答える 3

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);
    }
}
于 2013-02-19T07:27:37.373 に答える
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());
于 2013-02-19T07:47:45.797 に答える
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));
   }
}
于 2013-02-19T07:25:12.337 に答える