2

類型(オーディオ、ビデオ、写真)、キャプチャの日付/時刻、またはExif情報(写真の場合)などのルールに従ってフィルタリングしたいファイルオブジェクトのリストがあります。たとえば、ciclesのいくつかでそれを行うことができます。

それを行うための賢い方法はありますか?解決策はおそらくGoogleGuavaの述語を使用することだとどこかで読みましたが、それがどのように機能するのか理解できません。なにか提案を?ありがとう

4

1 に答える 1

6

Guava Predicates を使用すると、次のように何かを行うことができます

import java.io.File;
import java.util.Collection;
import java.util.List;

import javax.annotation.Nullable;

import com.google.common.base.Predicate;
import com.google.common.collect.Collections2;
import com.google.common.io.Files;

public class FileFiltering {

    public static void main(String[] args) {
        List<File> files = getFiles();
        Collection<File> audioFiles = Collections2.filter(files,
                new AudioPredicate());

        Collection<File> videoFiles = Collections2.filter(files,
                new VideoPredicate());
    }

    private static List<File> getFiles() {
        // TODO Auto-generated method stub
        return null;
    }
}

class AudioPredicate implements Predicate<File> {

    @Override
    public boolean apply(@Nullable File file) {
        return Files.getFileExtension(file.getName()).equalsIgnoreCase("mp3");
    }
}

class VideoPredicate implements Predicate<File> {

    @Override
    public boolean apply(@Nullable File file) {
        return Files.getFileExtension(file.getName()).equalsIgnoreCase("mkv");
    }
}

apply メソッドでは、必要な種類のファイルに対して true を返すコードを記述する必要があります。

于 2013-02-10T10:03:16.150 に答える