用lambda表达式创建文件过滤器
获取当前目录下名字中含有名字o的所有子项
File file =new File(".");
File[] subs =file.listFiles(filer ->filer.getName().contains("o"));
for(int i=0;i<subs.length;i++){
System.out.println(subs[i].getName());
}
JDk8之后推出的lambda表达式
lambda表达式可以面向函数式编程
lambda表达式给我们的直观感受是可以用更简洁的语法创建匿名内部类
当要实现的接口中只有一个抽象方法时才可以使用lambda表达式去替换原始的匿名内部类形式创建
基本语法:
(参数列表)->{
方法体
}
该过滤器的过滤条件是名字含有t的则接受
FileFilter filter=new FileFilter() {
public boolean accept(File file) {
/*
如下一句等同于:
String name = file.getName();
//return name.indexOf("t")!=-0;
boolean c = name.contains("t"); //contains:包含
return c; //含有t的则接受返回
*/
return file.getName().contains("t");
}
};
以下为代码简略的过程
FileFilter filter1 = (File file)->{
return file.getName().contains("t");
};//参数类型可以忽略不写
FileFilter filter2 = (file) ->{
return file.getName().contains("t");
};//如果方法体中只有一句代码时,方法体的{}可以不写
//如果这句代码含有return关键字,那么在忽略{}的同时忽略return
FileFilter filter3 = (file) ->file.getName().contains("t");
//如果参数列表中只有一个参数时()可以不写
FileFilter filter4= file ->file.getName().contains("t");
最简便的过滤器代码语句
File[] sub1s =dir.listFiles(filter4= file ->file.getName().contains("t"));