java
Java-java教程
网站版权界面还是源码,vscode插件排名,ubuntu时差,tomcat怎么双开,sqlite微信好友文件,wordpress 插件 活动,能写出前端框架是什么水平,python爬虫设置间隔时间,php 插件化,上海seo品牌推广,林业网站模板,网页出售账号源码,php 企业站模板lzw
《java视频教学》net交友网站源码,vscode文件夹显示插件,ubuntu上git,tomcat启动监听失败,爬虫鼠标模拟,php最好用的编辑器,韶关稳定的seo如何做lzw
Lambda概述网狐棋牌源码语言,vscode补全代码加空格,平板 装ubuntu,tomcat目录存放项目,爬虫内网url,php 过滤字母,广州创新seo优化哪个好,展示多厂家的网站源码,html5高端网络广告策划公司织梦模板lzw
Lambda表达式是JDK8开始后的一种新语法形式作用:简化匿名内部类的代码写法
格式:
(匿名内部类被重写方法的形参列表)->{ 被重写方法的方法体代码}注:->是语法形式,无实际意义
首先我们先定义一个抽象类,通过匿名内部类重写其方法,再对其进行简化,比较二者之间有何变化:
使用Lambda表达式之前:
public static void main (String[] args){ People p = new People(){ @Override public void run(){ System.out.println("小学生跑的很慢"); } }; p.run(); }abstract class People{ public abstract void run();}
使用Lambda表达式之后:
People p = ()->{ System.out.println("小学生跑的很慢");};//会出现报错
会出现报错,这是为什么呢?原因在于前面对于Lambda表达式的定义并不清晰,Lambda表达式并不能简化所有匿名内部类,其只能简化函数式接口匿名内部类的写法形式,且接口中有且仅有一个抽象方法,通常,我们会再接口上加上一个@Functionalinterface注解,标记该接口必须是满足函数式接口。
真正意义上通过Lambda表达式简化:
@FunctionalInterface//加上这个注解必须是函数式接口,且只有一个抽象方法interface People{ void run();}//简化之前的匿名内部类People p = new People(){ @Override public void run(){ System.out.println("小学生跑的很慢!"); }};//简化之后People p = () -> { System.out.println("小学生跑的很慢!");};
另外,也可以将其作为参数代入方法中去使用:
//在原来的基础上定义一个pk方法public static void pk(People p){ System.out.println("跑步情况如何:") p.run();}//不使用Lambda的情况下:pk(p);//需要在定义匿名内部类之后,将p代入;//使用Lambda的情况:People p = () -> { System.out.println("小学生跑的很慢!");};pk(() -> { System.out.println("小学生跑的很慢!");});//由于等号右边即是People创建的对象p,因此可以可以直接将其代入
Lambda实战的作用
在之前的学习过程中,我们学习过了Arrays的相关知识,其中有一个sort方法(可以将数组升序或降序排列),它其实也是接口类,并且只有一个抽象方法:
//精简之前:Arrays.sort(grade,new Comparator(){ @Override public int compare(Integer o1,Integer o2){ return o2 -o1;}});//精简之后:Arrays.sort(grade,(Integer o1,Integer o2) -> { return o2 -o1;});
Lambda表达式省略规则 参数类型可以省略不写
//参考前面的实战例子Arrays.sort(grade,(Integer o1,Integer o2) -> { return o2 -o1;});//省略参数类型之后Arrays.sort(grade,( o1, o2){ return o2 -o1;});
如果只有一个参数,参数类型可以省略,同时()也可以省略
//简单引用一个单个参数的例子,不需要了解其具体含义btn.addActionListener((ActionEvent e) -> { System.out.println("我是简单的例子。");});//简化之后:btn.addActionListener( e -> { System.out.println("我是简单的例子。");});
如果Lambda表达式的方法体代码只有一行代码。可以省略大括号不写,同时要省略分号
//参照上一条规则的例子btn.addActionListener( e -> { System.out.println("我是简单的例子。");});//简化之后:btn.addActionListener( e -> System.out.println("我是简单的例子。") );
如果Lambda表达式的方法体代码只有一行代码。可以省略大括号不写。此时,如果这行代码是return语句,必须省略return不写,同时也必须省略”;”不写
//参照第一条规则的代码Arrays.sort(grade,(Integer o1,Integer o2) -> { return o2 -o1;});//简化之后:Arrays.sort(grade,( o1, o2)-> o2 -o1);
《java视频教学》