【发布时间】:2016-10-19 07:42:21
【问题描述】:
我想使用 lambda 函数创建一个 FileNameFilter。
我的主要问题是我想在函数内部引入一个循环。 我尝试使用过滤器,但无法根据外部列表创建过滤器。
以下是我的代码:
File targetDir = new File(path);
FilenameFilter deleteFilter = new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
for(String tag: pageTagsList){
if(name.equals(tag))
return true;
}
return false;
}
};
File[] foundFiles = targetDir.listFiles(deleteFilter);
我想做的是这样的:
File[] foundFiles = targetDir.listFiles(
(dir,name)->pageTagsList.stream()
.filter(//code to filter here)
.orElse(false)
);
有正确的方法吗?
【问题讨论】:
-
也许这是一个人为的例子,关键是要知道如何在一般的 lambda 主体中进行迭代,但如果不是,最好的解决方案是使用
pageTagsSet类型的Set<String>.在HashSet中查找比遍历列表要快得多。所以(dir,name)->pageTagsList.contains(name)会这样做
标签: java lambda filter java-stream