Lambda表达式
- 函数式编程思想
- 面向对象的思想:做一件事,找一个能解决这个事情的对象,调用对象的方法,完成事情
- 函数式编程思想:只要能获取到结果,谁去做的,怎么做的都不重要,重视的是结果,不重视过程
- 冗余的Runnable代码
- 编程思想转换:
public class Demo1 {
public static void main(String[] args) {
//匿名内部类实现创建线程
new Thread(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"创建了这个线程!");
}
}).start();
//使用Lambda表达式创建线程
new Thread(()->{System.out.println(Thread.currentThread().getName()+"创建了这个线程!");}).start();
}
}
- Lambda表达式更优写法
- Lambda表达式标准格式:
eg:
public interface Cook {
void cooking();
}
public class cookMain {
public static void main(String[] args) {
//匿名内部类实现
makeCook(new Cook(){
@Override
public void cooking() {
System.out.println("做饭啦!");
}
});
//Lambda实现
makeCook(()->{System.out.println("做饭啦!");});
}
static void makeCook(Cook cook){
cook.cooking();
}
}
- Lambda省略
1.省略规则
- Lambda表达式使用前提:
File类
java.io.File
- 静态成员变量
- 绝对路径和相对路径
- 构造方法
1.
2.
3. - 常用方法:
1.获取方法:
2.判断功能的方法:
3.创建删除功能的方法:路径由File对象构造方法的参数传入
- 目录的遍历
递归
直接递归和间接递归
递归求1-n的和
文件搜索
/*文件过滤器+匿名内部类+Lambda表达式
idea:递归打印多级目录且只打印.java文件
* 分析:
* 使用递归需要创建方法来遍历文件
* 1打印指定路径下的目录需要创建一个File对象
* 2使用listFiles方法将目录下所有子目录以及文件存入File数组
* 3进行判断
* AFile数组中的元素是文件夹则继续调用方法本身进行遍历
* BFile数组中的元素是文件则直接打印
* */
public class fileSearchFilter2 {
public static void main(String[] args) {
File f=new File("E:\\IdeaProjects\\Base_Code\\src\\FileP");
printAllFile(f);
}
//创建打印方法
private static void printAllFile(File dir) {
//匿名内部类
/* File[] files = dir.listFiles(new FileFilter(){ @Override
public boolean accept(File pathname) {
if (pathname.isDirectory()){
return true;
}
return pathname.getName().toLowerCase().endsWith(".java");
}});*/
//Lambda简化
/* File[] files = dir.listFiles((File pathname)->{if (pathname.isDirectory()){
return true;
}
return pathname.getName().toLowerCase().endsWith(".java");});*/
//FilenameFilter过滤器+匿名内部类
/* File[] files = dir.listFiles(new FilenameFilter(){
@Override
public boolean accept(File dir, String name) {
return new File(dir,name).isDirectory()||name.toLowerCase().endsWith(".java");
}
});*/
FilenameFilter过滤器+Lambda表达式
File[] files = dir.listFiles(( d,name)->new File(d,name).isDirectory()||name.toLowerCase().endsWith(".java"));
for (File fi : files) {
//System.out.println(fi);//不想打印根目录可直接使用这个
if(fi.isDirectory()){
printAllFile(fi);
}else{
System.out.println(fi);
}
}
}
}