关于Java的lambda表达式

导读:本篇文章讲解 关于Java的lambda表达式,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

菜鸟教程Java Lambda地址链接

JDK8之后,java支持了lambda表达式这个特性.

  • lambda可以用更精简的代码创建匿名内部类.但是该匿名内部类实现的接口只能有一个抽象方法,否则无法使用!
  • lambda表达式是编译器认可的,最终会将其改为内部类编译到class文件中
import java.io.File;
import java.io.FileFilter;

/**
 * lambda表达式  JDK8之后推出的新特性
 *
 * lambda可以让程序员面向函数式编程
 * 让我们用更精简的语法创建匿名内部类
 * 语法:
 * (参数列表)->{
 *     方法体
 * }
 * 当我们使用匿名内部类创建一个对象时,如果实现的接口中【只有一个抽象方法】时,该操作就可以使用lambda
 * 表达式做替换。是的代码更简洁,优雅。
 *
 */
public class LambdaDemo {
    public static void main(String[] args) {
        //匿名内部类写法创建一个文件过滤器
        FileFilter filter1 = new FileFilter() {
            public boolean accept(File f) {
                return f.length()>500;
            }
        };

        //lambda表达式写法:去掉接口和方法名部分,在参数列表和方法体大括号之间加上"->"就是lambda
        FileFilter filter2 = (File f)->{
            return f.length()>500;
        };

        //lambda表达式中,可以忽略方法参数类型(仅写参数名即可)
        FileFilter filter3 = (f)->{
            return f.length()>500;
        };
        //如果该方法的参数只有【一个】的时候,参数列表的"()"可以忽略不写
        FileFilter filter4 = f->{
            return f.length()>500;
        };

        //如果方法体中只有一句代码,那么方法体的"{}"可以忽略不写
        //注:如果有return关键字,那么在忽略"{}"的同时"return"关键字也必须一同忽略。
        FileFilter filter5 = f->f.length()>500;

        //原来匿名内部类在File当中的应用
        File dir = new File("./src/file");
        if(dir.isDirectory()){
            //匿名内部类形式
//            File[] subs = dir.listFiles(new FileFilter() {
//                public boolean accept(File file) {
//                    return file.length()>1000;
//                }
//            });
            File[] subs = dir.listFiles(f->f.length()>1000);
            for(int i=0;i<subs.length;i++){
                System.out.println(subs[i].getName()+":"+subs[i].length());
            }
        }


    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/91097.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!