java8lambda的使用

lwb444      2022-05-17     538

关键词:

与python不一样,python lambda是定义匿名函数,而在java8中lambda是匿名内部类

例1、用lambda表达式实现Runnable

我开始使用Java 8时,首先做的就是使用lambda表达式替换匿名类,而实现Runnable接口是匿名类的最好示例。看一下Java 8之前的runnable实现方法,需要4行代码,而使用lambda表达式只需要一行代码。我们在这里做了什么呢?那就是用() -> {}代码块替代了整个匿名类

技术图片
// Java 8之前:
new Thread(new Runnable() {
    @Override
    public void run() {
    System.out.println("Before Java8, too much code for too little to do");
    }
}).start();

//Java 8方式:
new Thread( () -> System.out.println("In Java8, Lambda expression rocks !!") ).start();
技术图片

输出:

too much code, for too little to do
Lambda expression rocks !!

这个例子向我们展示了Java 8 lambda表达式的语法。你可以使用lambda写出如下代码:

(params) -> expression
(params) -> statement
(params) -> { statements }

例如,如果你的方法不对参数进行修改、重写,只是在控制台打印点东西的话,那么可以这样写:

() -> System.out.println("Hello Lambda Expressions");

如果你的方法接收两个参数,那么可以写成如下这样:

(int even, int odd) -> even + odd

顺便提一句,通常都会把lambda表达式内部变量的名字起得短一些。这样能使代码更简短,放在同一行。所以,在上述代码中,变量名选用a、b或者x、y会比even、odd要好。

例2、使用Java 8 lambda表达式进行事件处理

如果你用过Swing API编程,你就会记得怎样写事件监听代码。这又是一个旧版本简单匿名类的经典用例,但现在可以不这样了。你可以用lambda表达式写出更好的事件监听代码,如下所示:

技术图片
// Java 8之前:
JButton show =  new JButton("Show");
show.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
    System.out.println("Event handling without lambda expression is boring");
    }
});

// Java 8方式:
show.addActionListener((e) -> {
    System.out.println("Light, Camera, Action !! Lambda expressions Rocks");
});
技术图片

Java开发者经常使用匿名类的另一个地方是为 Collections.sort() 定制 Comparator。在Java 8中,你可以用更可读的lambda表达式换掉丑陋的匿名类。我把这个留做练习,应该不难,可以按照我在使用lambda表达式实现 Runnable 和 ActionListener 的过程中的套路来做。

java8lambda表达式示例

例1、用lambda表达式实现Runnable我开始使用Java8时,首先做的就是使用lambda表达式替换匿名类,而实现Runnable接口是匿名类的最好示例。看一下Java8之前的runnable实现方法,需要4行代码,而使用lambda表达式只需要一行代码。我们在这... 查看详情

java8lambda表达式(代码片段)

【前言】 java8新特性java8函数接口java8Optional使用总结Java8时间日期使用 java8中一个非常重要的特性就是lambda表达式,我们可以把它看成是一种闭包,它允许把函数当做参数来使用,是面向函数式编程的思想,一定程度上可... 查看详情

使用mockito为java8lambda表达式编写存根

我有一个方法,我使用Java8lambda表达式。在为这个方法编写单元测试时,我需要为该表达式编写存根。我们怎么写这个?publicList<User>methodA(StringuserId){List<User>users=newArrayList<>();userRepository.findAll().forEach(users::add);List&l 查看详情

如果使用我的服务使用java8lambda/streams列表不为空,如何从列表中删除每个元素(代码片段)

您好我想使用java8更新此遗留代码。if(CollectionUtils.isNotEmpty(listOfObjects)for(Objecto:listOfObjects)objectService.delete(o);我是java8和lambda表达式的新手,我想使用它并尽可能地重塑我的代码。不是因为它总是很重要,而是因为我想要习惯它能... 查看详情

java8lambda表达式一看就会

匿名内部类的一个问题是:当一个匿名内部类的实现非常简单,比如说接口只有一个抽象函数,那么匿名内部类的语法有点笨拙且不清晰。我们经常会有传递一个函数作为参数给另一个函数的实际需求,比如当点击一个按钮时,... 查看详情

java8lambda表达式

Java8出来很久了,正好在看RXJava,据说学习了lambda和streamapi,可以能快速的理解RXJava,于是就来看看Java8的新特性。为什么使用Lambda表达式?Lambda表达式是一个匿名函数,是一段可以传递的代码,因此它... 查看详情

java8lambda表达式详细讲解(代码片段)

Lambda表达式,它是推动Java8发布的最重要新特性。Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中)。使用Lambda表达式可以使代码变的更加简洁紧凑。Lambda几种特性可选类型声明:不需要声明参... 查看详情

java8lambda表达式详细讲解(代码片段)

Lambda表达式,它是推动Java8发布的最重要新特性。Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中)。使用Lambda表达式可以使代码变的更加简洁紧凑。Lambda几种特性可选类型声明:不需要声明参... 查看详情

java8lambda表达式详细讲解(代码片段)

Lambda表达式,它是推动Java8发布的最重要新特性。Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中)。使用Lambda表达式可以使代码变的更加简洁紧凑。Lambda几种特性可选类型声明:不需要声明参... 查看详情

java8lambda表达式

Java8Lambda表达式语法lambda表达式的语法格式如下:(parameters)->expression或(parameters)->{statements;}Lambda表达式实例publicclassCalculator{interfaceIntegerMath{intoperation(inta,intb);}publicintoperateBinary(inta,in 查看详情

java8lambda表达式详解手册及实例(代码片段)

先贩卖一下焦虑,Java8发于2014年3月18日,距离现在已经快6年了,如果你对Java8的新特性还没有应用,甚至还一无所知,那你真得关注公众号“程序新视界”,好好系列的学习一下Java8的新特性。Lambda表达式已经在新框架中普通使... 查看详情

java8lambda表达式10个示例

 1.实现Runnable线程案例使用()->{} 替代匿名类://BeforeJava8:newThread(newRunnable(){@Overridepublicvoidrun(){System.out.println("BeforeJava8");}}).start();//Java8way:newThread(()->System.out.println("InJ 查看详情

java8lambda表达式的10个例子(转)

原文:http://jobar.iteye.com/blog/2023477Java8中Lambda表达式的10个例子例1用Lambda表达式实现Runnable接口Java代码收藏代码//BeforeJava8:newThread(newRunnable(){@Overridepublicvoidrun(){System.out.println("BeforeJava8,toomuchcodef 查看详情

java8lambda表达式(代码片段)

java8的lambda表达式提供了一些方便list操作的方法,主要涵盖分组、过滤、求和、最值、排序、去重。跟之前的传统写法对比,能少写不少代码。实体类importjava.math.BigDecimal;importjava.util.Date;publicclassUserprivateLongid;//姓名private... 查看详情

java8lambda表达式(代码片段)

java8的lambda表达式提供了一些方便list操作的方法,主要涵盖分组、过滤、求和、最值、排序、去重。跟之前的传统写法对比,能少写不少代码。实体类importjava.math.BigDecimal;importjava.util.Date;publicclassUserprivateLongid;//姓名private... 查看详情

java8lambda表达式中的foreach如何提前终止?

点击关注公众号,实用技术文章及时了解1.情景展示如上图所示,我们想要终止for循环,使用return。执行结果如下:我们可以看到,只有赵六没被打印出来,后续的数组元素依旧被执行了。也就是说,... 查看详情

java8lambda表达式

刚过了春节,来上班,感觉上有些疲乏,劳累。眼睛无法适应长时间盯着屏幕。所以总结一下java8的新特性,lambda用法。功能接口、函数集合、方法引用、interface默认方法默认方法:  java8允许我为接口自身指定实现一个默认... 查看详情

java8lambdas并编写非脆弱的代码(代码片段)

背景:学习Java8并且真正尝试拥抱新的lambda表达式,并且更聪明地编写代码。我按照这整篇文章(这可以很好地完成整个过程),直到下面的代码。突然之间,最后两个陈述的工作原理尚不清楚。以下方法从有资格获得选择性服... 查看详情