Chi*_*ain 0 java lambda filter java-stream
我想使用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);
Run Code Online (Sandbox Code Playgroud)
我想做的是这样的:
File[] foundFiles = targetDir.listFiles(
(dir,name)->pageTagsList.stream()
.filter(//code to filter here)
.orElse(false)
);
Run Code Online (Sandbox Code Playgroud)
有没有正确的方法来做到这一点?
你可以让lambda成为任何代码块(尽管从里面引用的任何变量都必须是最终的).为了达到预期的效果,您可以执行以下操作:
File[] foundFiles = targetDir.listFiles((dir, name) -> pageTagsList.stream().anyMatch(name::equals));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
851 次 |
| 最近记录: |