リストをフィルタリングするかなり単純なメソッドを実装しようとしています。これはファイル オブジェクトのリストであり、.asp で終わるファイルが 1 つだけ存在する必要があります。そのファイルをリストから除外します。このファイルを実際にリストから削除したくないことに注意してください。そのリストの特定の反復で無視できるようにしたいだけです。
私の元の(総当たり)実装は次のようになりました。
public List<File> getSurveyFiles() throws Exception {
List<File> surveyFiles = new ArrayList<File>(files.size() - 1);
for ( File f : files ) {
if ( !f.getName().endsWith(".asp") ) {
surveyFiles.add(f);
}
}
return surveyFiles;
}
それは機能しますが、2 つ目のリストを作成し、1 つのリストから別のリストに多くのコピーを行っているという事実に、非常に無駄を感じます。
私がいじった別のオプションは、guava-libraries (http://code.google.com/p/guava-libraries/) を使用し、次のようにフィルター機能を利用することです。
public class SurveyFileControllerPredicate implements Predicate<File> {
@Override
public boolean apply(File file) {
return file.getName().endsWith(".asp");
}
}
...
public Iterable<File> getSurveyFiles() throws Exception {
return Iterables.filter(
files,
Predicates.not(new SurveyFileControllerPredicate())
);
}
フィルターの実装は、事前ではなく反復時に .asp ファイルを削除するため、このコードには 2 番目のリストを作成しないという利点がありますが、コードがより複雑になると感じています。
私が考慮していない他のより単純な実装はありますか?
物事の全体的なスキームでは、私がどの実装を選択するかはおそらく問題ではありません。他の開発者がこれにどのように取り組み、どのオプションを選択するのか、私はただ興味があります.
ありがとう。