Java8 lambda表达式2种常用方法代码解析
与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 的过程中的套路来做。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
相关推荐
-
lambda表达式解决java后台分组排序过程解析
需求:按照起始日期查询出数据库里一段连续日期的住院信息. 问题:数据库里的住院信息可能不是完整的,也就是在给出的日期区间里只有若干天的数据,缺少某些日期的数据. 解决: 1.需要我们先按日期分组查出数据库里有的数据: 2.然后遍历日期,将不存在的日期以日期为key,value为null插入集合里: 3.对集合里的key即日期进行排序. 注:这里分组和排序都用JDK8的新特性lambda表达式 /** * * @param startTime 开始时间 * @param endTime 结束时间
-
Java Lambda表达式的方法引用和构造器引用实例分析
本文实例讲述了Java Lambda表达式的方法引用和构造器引用.分享给大家供大家参考,具体如下: 一 点睛 如果Lambda表达式的代码块只有一条代码,还可以在代码块中使用方法引用和构造器引用,以使得Lambda表达式更加简洁. 种类 示例 说明 对应的Lambda表达式 引用类方法 类名::类方法 函数式接口中被实现方法的全部参数传给该类方法作为参数. (a,b,...) -> 类名.类方法(a,b, ...) 引用特定对象的实例方法 特定对象::实例方法 函数式接口中被实现方法的全部参数传
-
Java Lambda表达式原理及多线程实现
1.使用Lambda表达式实现多线程 public static void main(String[] args) { //使用匿名内部类的方式,实现多线程 new Thread(new Runnable() { @Override public void run() { System.out.println(Thread.currentThread().getName() + "新线程创建了!"); } }).start(); //使用Lambda表达式,实现多线程 new Thre
-
Java8 用Lambda表达式给List集合排序的实现
Lambda用到了JDK8自带的一个函数式接口Comparator<T>. 准备一个Apple类 public class Apple { private int weight; private String color; public Apple(){} public Apple(int weight) { this.weight = weight; } public Apple(int weight, String color) { this.weight = weight; this.c
-
详解Java中的Lambda表达式
简介 Lambda表达式是Java SE 8中一个重要的新特性.lambda表达式允许你通过表达式来代替功能接口. lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块). Lambda表达式还增强了集合库. Java SE 8添加了2个对集合数据进行批量操作的包: java.util.function 包以及java.util.stream 包. 流(stream)就如同迭代器(iterator),但附加了许多额外的功能.
-
Java8中Lambda表达式使用和Stream API详解
前言 Java8 的新特性:Lambda表达式.强大的 Stream API.全新时间日期 API.ConcurrentHashMap.MetaSpace.总得来说,Java8 的新特性使 Java 的运行速度更快.代码更少.便于并行.最大化减少空指针异常. 0x00. 前置数据 private List<People> peoples = null; @BeforeEach void before () { peoples = new ArrayList<>(); peoples
-
Java Lambda表达式与匿名内部类的联系和区别实例分析
本文实例讲述了Java Lambda表达式与匿名内部类的联系和区别.分享给大家供大家参考,具体如下: 一 点睛 Lambda表达式与匿名内部类存在如下相同点: Lambda表达式与匿名内部类一样,都可以直接访问"effectively final"的局部变量,以及外部类的成员变量(包括实例变量和类变量). Lambda表达式创建的对象与匿名内部类生成的对象一样, 都可以直接调用从接口继承得到的默认方法. Lambda表达式与匿名内部类主要存在如下区别: 匿名内部类可以为任意接口创建实例
-
java lambda表达式用法总结
这篇文章主要介绍了java lamda表达式用法总结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.什么是函数式编程(百度百科上的解释) 2.为什么要使用函数式编程(有什么好处) 1.代码简洁,减少代码量 2.接近自然语言,容易理解 传统实现分组 List<Student> students; Map<String,List<Student>> maps = Maps.newHashMap(); for(Stude
-
Java8 lambda表达式2种常用方法代码解析
与python不一样,python lambda是定义匿名函数,而在java8中lambda是匿名内部类 例1.用lambda表达式实现Runnable 我开始使用Java 8时,首先做的就是使用lambda表达式替换匿名类,而实现Runnable接口是匿名类的最好示例.看一下Java 8之前的runnable实现方法,需要4行代码,而使用lambda表达式只需要一行代码.我们在这里做了什么呢?那就是用() -> {}代码块替代了整个匿名类. // Java 8之前: new Thread(ne
-
JAVA8 lambda表达式权威教程
Java 8新特性----Stream流 jdk8是Java 语言开发的一个主要版本,它支持函数式编程,新的 JavaScript 引擎,新的日期 API,新的Stream API 等等.今天就重点介绍一个非常重要得特性之一 lambda表达式 一:什么是 Stream? Stream(流)是一个来自数据源的元素队列并支持聚合操作 Java中的Stream并不会存储元素,而是按需计算. 数据源 流的来源. 可以是集合,数组,I/O channel, 产生器generator 等. 聚合操作 类似
-
Java8 lambda表达式的10个实例讲解
目录 例1.用lambda表达式实现Runnable 例2.使用Java 8 lambda表达式进行事件处理 例3.使用lambda表达式对列表进行迭代 例4.使用lambda表达式和函数式接口Predicate 例5.如何在lambda表达式中加入Predicate 例6.Java 8中使用lambda表达式的Map和Reduce示例 例7.通过过滤创建一个String列表 例8.对列表的每个元素应用函数 例9.复制不同的值,创建一个子列表 例10.计算集合元素的最大值.最小值.总和以及平均值
-
Java 8 Lambda 表达式比较器使用示例代码
引言 在这个例子中,我们将向您展示如何使用 java8 lambda 表达式编写一个 Comparator 来对 List 进行排序. 经典的比较器示例: Comparator<Developer> byName = new Comparator<Developer>() { @Override public int compare(Developer o1, Developer o2) { return o1.getName().compareTo(o2.getName());
-
Java lambda表达式实现Flink WordCount过程解析
这篇文章主要介绍了Java lambda表达式实现Flink WordCount过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 本篇我们将使用Java语言来实现Flink的单词统计. 代码开发 环境准备 导入Flink 1.9 pom依赖 <dependencies> <dependency> <groupId>org.apache.flink</groupId> <artifactId>
-
MyBatis Mapper接受参数的四种方式代码解析
这篇文章主要介绍了MyBatis Mapper接受参数的四种方式代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 对于单个参数而言,可以直接写#{param},这里的占位符名称没有限制,反正就一个参数一个占位符,不需要指定名称 对于多个参数,有常用的四种方式 根据位置排序号 public interface UserDao { public Integer addUser(String username, String password)
-
JavaScript具有类似Lambda表达式编程能力的代码(改进版)
在发了博文之后,我又花了一些时间尝试解决这个问题--经过几次尝试之后,我找到了另一种pattern,括号并不再是必要的了: 复制代码 代码如下: eval(function () { var s = '', ww = [v] > (s += v); var ws = [n] > ww(' <A href="#">(' + n + ')</A> '); pnView3(14, [n] > ww(' [' + n + '] '), 1, 37, w
-
Java8 Lambda表达式详解及实例
第一个Lambda表达式 在Lambda出现之前,如果我们需要写一个多线程可能需要下面这种方式: Runnable runnable = new Runnable() { @Override public void run() { System.out.println("Hello runnable"); } }; ... thread.start(); 上面的例子如果改成使用Lambda就会简单许多: Runnable noArgs = ()->System.out.print
-
Java8 Lambda表达式模板方法实现解析
Java注解提供了关于代码的一些信息,但并不直接作用于它所注解的代码内容.在这个教程当中,我们将学习Java的注解,如何定制注解,注解的使用以及如何通过反射解析注解. Java1.5引入了注解,当前许多java框架中大量使用注解,如Hibernate.Jersey.Spring.注解作为程序的元数据嵌入到程序当中.注解可以被一些解析工具或者是编译工具进行解析.我们也可以声明注解在编译过程或执行时产生作用. 在使用注解之前,程序源数据只是通过java注释和javadoc,但是注解提供的功能要远远超
-
Java8使用LocalDate计算日期实例代码解析
最近项目遇到一个需要计算两个日期间隔的期限,需要计算出,整年整月整日这样符合日常习惯的说法,利用之前的Date和Calendar类会有点复杂,刚好项目使用了JDK8,那就利用起来这个新特性,上代码: public static String getTerm(String startTime, String endTime) { String term = ""; if (startTime.length() != 8 || endTime.length() != 8) { return
随机推荐
- 详解ABP框架中的日志管理和设置管理的基本配置
- 各种语言常用的一句话判断代码
- 批处理应用 OFFICE复位
- Spring Task定时任务的配置和使用详解
- PHP使用range协议实现输出文件断点续传代码实例
- 完美解决android M上锁屏情况下,禁止pc通过MTP访问手机存储单元
- MySQL JOIN之完全用法
- js实现C#的StringBuilder效果完整实例
- 提升Ruby on Rails性能的几个解决方案
- 超详细的CMD DOS下符号的作用参考第1/2页
- Django1.3添加app提示模块不存在的解决方法
- 格式导致的Excel导入sql出现异常的解决方法
- 从JavaScript 到 JQuery (1)学习小结
- 使用jQuery的load方法设计动态加载及解决被加载页面js失效问题
- 关于JQuery($.load)事件的用法和分析
- C++实现简单的希尔排序Shell Sort实例
- Laravel Intervention/image图片处理扩展包的安装、使用与可能遇到的坑详解
- ThinkPHP框架使用redirect实现页面重定向的方法实例分析
- SpringBoot集成ElaticJob定时器的实现代码
- 易语言密码查看功能制作