如何正确传递函数参数?

时间:2013-10-12 09:02:01

标签: java arrays function

目前我的代码如下:

    public boolean accept(File dir, String filename) {
        ...
        return filename.contains(".png") || filename.contains(".jpg") || file.isDirectory();

(完整的代码可以在那里找到 - https://stackoverflow.com/a/18523047/604388

因此,.png.jpg现在是硬编码的。我想把它作为函数参数,并允许传递几个扩展,而不只是一个。我怎么能这样做?

我想我可以将扩展列表作为数组传递,但是如何为所有数组元素执行所有这些检查(filename.contains())?

5 个答案:

答案 0 :(得分:2)

我能想到的最简单的方法是迭代扩展数组:

boolean res = false;
for (String ext: extensions) {
    if (filename.endsWith(ext)) {
        res = true;
    }
}

答案 1 :(得分:1)

我担心没有内置答案,所以迭代将是一个很好的旧解决方案:

boolean result = false;
for (String extension : extensions) {
    if (filename.contains(extension)) {
        result = true;
        break;
    }
}
return result || file.isDirectory();

extensions可能是String[]Collection<String>

注意:更好的是,使用endsWith()而不是contains()来扩展。但我使用的条件与OP相同......

答案 2 :(得分:1)

您应该考虑使用enum来避免硬编码.-

public enum Extension {
    PNG     (".png"),
    JPG     (".jpg");

    private String suffix;

    Extension(String suffix) {
        this.suffix = suffix;
    }

    public String getSuffix() {
        return suffix;
    }
}

您的代码看起来像这样.-

public boolean accept(File dir, String filename, Extension... extensions) {
    boolean res = file.isDirectory();

    if (!res) {
        for (int i = 0; i < extensions.length; i ++) {
            res = res || filename.contains(extensions[i].getSuffix());
        }
    }

    return res;
}

答案 3 :(得分:0)

您可以使用下面的代码段,该代码段应该足以满足您的需求:

private boolean loadFileList(String directory, String...extensions){
    for (String extension : extensions){
        if (filename.contains(extension))
            return true;
    }
    return false;
}

P.S。我不确定filename类型是什么,但如果返回boolean则上述示例应该适合

答案 4 :(得分:0)

import java.io.File;
import java.io.FileFilter;

public class NewClass {
    public static File[] loadFileList(String dir, FileFilter filter){
        return new File(dir).listFiles(filter);
    }

    public static void loadFiles(){
        File files[] = loadFileList("c:\\", new FileFilter() {
            public boolean accept(File pathname) {
                if(pathname.getAbsolutePath().toLowerCase().endsWith(".png")){
                    return true;
                }
                if(pathname.getAbsolutePath().toLowerCase().endsWith(".jpg")){
                    return true;
                }
                return false;
            }
        });
        // here do some DIRTY things with files....
    }
}