2013-02-10 135 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