2013-02-10 82 views
0

我有一个文件对象列表,我希望按照类似规则(音频,视频,照片)或捕捉日期/时间或Exif信息(照片的情况下)等规则进行过滤。例如,我可以用一些Cicle来做。Android列表过滤器

有一个聪明的方法来做到这一点?我在某处读到解决方案可能是使用Google Guava的Predicates,但我无法理解它是如何工作的。任何建议?由于

回答

3

使用番石榴谓词你会做沿着

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"); 
    } 
} 

的线路中的应用方法()你需要编写代码,将返回真为你想要的那种文件的东西。

+0

感谢您的回答,我怎样才能同时结合多个谓词? – phcaze 2013-02-11 11:21:58

+1

'com.google.common.base.Predicates'允许将多个谓词与'或'和'和'结合在一起。 – Pierre 2013-02-11 15:37:40

+0

我在谓词上得到了这个错误:'java.lang.NoClassDefFoundError:' – phcaze 2013-02-12 14:22:55