2020-06-17Java入门(二十三)递归 过滤器

递归

用递归的方法计算1~n

/**

* 递归 在一个方法内部 对自身进行调用

* 用简单的程序解决复杂的问题

* 构造函数不能用递归 必须要有 结束的条件(保证其能停下来 要不然会有占内存溢出)

* 直接递归 和间接递归

* main方法压栈执行  直接递归方法 调用方法  会在栈内存中一直调用a

*

* 使用递归时 首先要判断他的结束条件是什么 在判断他的方法目的 是加减乘除

*

*/

public class Demo {

public static void main(String[] args) {//程序执行的入口

        //构造函数不能递归 计算1到n之间的和不推荐 建议使用for循环

        /*int sum1 = sum(3);

System.out.println(sum1);*/

        int j=jc(5);

System.out.println(j);

}

public static int sum(int n){//n是3  2 1(结束条件)

        //获取到下一个被加的数字

        if (n==1){//结束条件 到1 未知

            return 1;

}

return n+sum(n-1);//结束条件

    }

//5的阶乘 5 4 3 2 1(结束条件是1) 目的乘法的目的 方法的主体不变 参数改变

    public static int jc(int a){

if (a==1){

return 1;

}

return a*jc(a-1);

}

}



递归打印多及目录  递归就会用到方法 

文件搜索 递归

过滤器 递归文件搜索的优化  用于过滤文件 抽象方法 过滤文件accept  

fileFilter 抽象路径名的过滤器  fileNameFilter 实现此接口的类是咧可用于过滤器文件名 file dir目录

过滤规则

public class FileNameFilter {

public static void main(String[] args) {

File file1 =new File("F:\\ideawork");

getAllFile(file1);

}

public static void getAllFile(File dir){

// System.out.println(dir);

/**

        * 过滤规则 pathname 是文件或者是.java结尾的文件返回true

        * 匿名内部类 传递对象

        */

// FileFilter fileFilter = new FileFilter();

//File[] files=dir.listFiles(fileFilter);

/* File[] files=dir.listFiles(new FileFilter() {

@Override

public boolean accept(File pathname) {

                //过滤队则 pathname是文件加.java

return pathname.isDirectory()||pathname.getName().endsWith(".java");

}

});*/

      //匿名内部类只用lambda表达式

      /* File[] files = dir.listFiles((File pathname)->{

return pathname.isDirectory()||pathname.getName().endsWith(".java");

});*/

      //简化

        File[] files = dir.listFiles((/*File*/ pathname)-> pathname.isDirectory()||pathname.getName().endsWith(".java")

);

/*

File[] files=dir.listFiles(new FilenameFilter() {

@Override

public boolean accept(File dir, String name) {

return new File(dir,name).isDirectory()||name.toLowerCase().endsWith(".java");

}

});*/

        //使用lambda表达式 优化匿名内部类 接口中只有一个抽象方法accept

      /* File[] files=dir.listFiles((*//*参数*//*File d,String name)->{

return new File(d,name).isDirectory()||name.toLowerCase().endsWith(".java");

});*/

        //简略lambda

        /*File[] files=dir.listFiles((*//*参数*//**//*File*//* d,*//*String*//* name)->

*//*return*//* new File(d,name).isDirectory()||name.toLowerCase().endsWith(".java")

);*/

//

        for (File file : files) {

if (file.isDirectory()){

getAllFile(file);

}else {

System.out.println(file);

}

}

}

你可能感兴趣的:(2020-06-17Java入门(二十三)递归 过滤器)