Java8 lambda表达式2种常用方法代码解析
与python不一样,pythonlambda是定义匿名函数,而在java8中lambda是匿名内部类
例1、用lambda表达式实现Runnable
我开始使用Java8时,首先做的就是使用lambda表达式替换匿名类,而实现Runnable接口是匿名类的最好示例。看一下Java8之前的runnable实现方法,需要4行代码,而使用lambda表达式只需要一行代码。我们在这里做了什么呢?那就是用()->{}代码块替代了整个匿名类。
//Java8之前: newThread(newRunnable(){ @Override publicvoidrun(){ System.out.println("BeforeJava8,toomuchcodefortoolittletodo"); } }).start(); //Java8方式: newThread(()->System.out.println("InJava8,Lambdaexpressionrocks!!")).start();
输出:
toomuchcode,fortoolittletodo
Lambdaexpressionrocks!!
这个例子向我们展示了Java8lambda表达式的语法。你可以使用lambda写出如下代码:
(params)->expression
(params)->statement
(params)->{statements}
例如,如果你的方法不对参数进行修改、重写,只是在控制台打印点东西的话,那么可以这样写:
()->System.out.println("HelloLambdaExpressions");
如果你的方法接收两个参数,那么可以写成如下这样:
(inteven,intodd)->even+odd
顺便提一句,通常都会把lambda表达式内部变量的名字起得短一些。这样能使代码更简短,放在同一行。所以,在上述代码中,变量名选用a、b或者x、y会比even、odd要好。
例2、使用Java8lambda表达式进行事件处理
如果你用过SwingAPI编程,你就会记得怎样写事件监听代码。这又是一个旧版本简单匿名类的经典用例,但现在可以不这样了。你可以用lambda表达式写出更好的事件监听代码,如下所示:
//Java8之前: JButtonshow=newJButton("Show"); show.addActionListener(newActionListener(){ @Override publicvoidactionPerformed(ActionEvente){ System.out.println("Eventhandlingwithoutlambdaexpressionisboring"); } }); //Java8方式: show.addActionListener((e)->{ System.out.println("Light,Camera,Action!!LambdaexpressionsRocks"); });
Java开发者经常使用匿名类的另一个地方是为Collections.sort()定制Comparator。在Java8中,你可以用更可读的lambda表达式换掉丑陋的匿名类。我把这个留做练习,应该不难,可以按照我在使用lambda表达式实现Runnable和ActionListener的过程中的套路来做。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。