详解Lambda表达式
前言
一、Lambda的入门
1、什么是Lambda表达式
Lambda表达式是JAVA8中提供的一种新的特性,是一个匿名函数方法。可以把Lambda表达式理解为一段可以传递的代码,可以写出更简洁、更灵活的代码。
2、Lambda表达式使用条件
Lambda表达式可以认为是对匿名内部类的一种简化,但不是所有的匿名内部类都可以简化为Lambda表达式。
重点来了
只有函数式接口的匿名内部类才可以使用Lambda表达式来进行简化。
- 函数式接口不同于普通接口,较为特殊化。接口当中只有一个抽象方法是需要我们去实现的,Lambda表达式正好是针对这个唯一的抽象方法使用。
3、Lambda表达式的入门使用
拿接口的典型例子,线程来分析
线程创建的两种方式:继承Thread方式、实现Runnable方式。
Runable是一个接口,里面只有一个抽象方法是需要我们强制实现的,该接口就是一个函数式接口。
public interface Runnable{void run(); }
匿名内部方式创建线程
public class carDemo {public static void main(String[] args) {Thread t1=new Thread(new Runnable() {@Override//这里重写Runnable接口里面的run()方法public void run() {System.out.println("匿名内部类方式-启动线程");}});t1.start();} }
Lambda表达式创建线程
public static void main(String[] args) {Thread t1=new Thread(() -> System.out.println("匿名内部类方式-启动线程"));//看,多么简便、多么流畅,就问你,是不是已经爱上她了?t1.start(); }
二、Lambda语法格式
1、Lambda表达式的标准语法格式
Lambda表达式就是对函数式接口中抽象方法的实现,是对其匿名内部类的一个简写,只保留了方法的参数列表和方法体,其他的成分可以省略。因此,Lambda表达式的格式非常简洁,只有三部分组成:
参数列表
箭头
方法体
总结:(参数列表)->{方法体}
2、Lambda:省略模式
在Lambda标准格式的基础上,使用省略写法的规则为:
- 小括号内参数的参数类型可以省略。
- 小括号有且只有一个参数,则小括号可以直接省略。
- 如果大括号有且只有一个语句,无论是否有返回值,大括号、return关键字、分号可以省略。
3、Lambda省略模式代码实现
小括号内参数的参数类型可以省略。
实战案例:
定义一个计算器接口
public interface Calculator {int cal(int a); }
主方法当中实现计算机接口
public static void main(String[] args) {method(5, n -> {return n++; });/*** int cal(int a);抽象方法当中,小括号当中只有一个参数,这里省略5的小括号,用n指代前面的5,进行接下来的操作*/}public static void method(int num,Calculator calculator{//method方法当中传入一个int类型数字,和一个计算器接口int result=calculator.cal(num);//接口类调用抽象方法System.out.println("reuslt="+result);}
运行结果
reuslt=5
小括号有且只有一个参数,则小括号可以直接省略。
实战案例:
创建一个Person类
public class Person {private int age;private String name;public Person(String name,int age) {this.name = name;this.age = age;}public Person() {}@Overridepublic String toString() {return "年龄:" + age +",姓名:" + name ;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;} }
在main方法当中使用Lambda表达式
public static void main(String[] args) {Person[] persons = new Person[4];persons[0] = new Person("袁隆平", 25);persons[1] = new Person("邓稼先", 30);persons[2] = new Person("清华大学", 46);persons[3] = new Person("北京大学", 89);Arrays.sort(persons, (one, two) ->one.getAge() - two.getAge());//将Persons放进Arrays.sort()方法当中,两个对象之间对比,进行升序排序for(Person p:persons){//forEach()循环遍历整个persons数组,并打印System.out.println(p.toString());}}
运行结果
年龄:25,姓名:袁隆平 年龄:30,姓名:邓稼先 年龄:46,姓名:清华大学 年龄:89,姓名:北京大学
如果大括号有且只有一个语句,无论是否有返回值,大括号、return关键字、分号可以省略。
实战案例:
这里我就拿上面的Person类举例,直接在main主方法当中运行
- 标准格式
public static void main (String[]args){Person[] persons = new Person[4];persons[0] = new Person("袁隆平", 25);persons[1] = new Person("邓稼先", 30);persons[2] = new Person("清华大学", 46);persons[3] = new Person("北京大学", 89);Arrays.sort(persons, new Comparator<Person>() {public int compare(Person o1, Person o2) {//这里有大括号和返回值 return o1.getAge() - o2.getAge();}});}
- 简便格式
Arrays.sort(persons, (one, two) -> one.getAge() - two.getAge());//这里已经去掉了大括号和返回值for (Person p : persons) {//forEach()循环遍历整个persons数组,并打印System.out.println(p.toString());}
```java```
运行结果
同上
年龄:25,姓名:袁隆平 年龄:30,姓名:邓稼先 年龄:46,姓名:清华大学 年龄:89,姓名:北京大学
详解Lambda表达式相关推荐
- Java8 详解Lambda表达式
1. 引言 java.util.function包 我们发现使用lambda表达式的时候,经常需要定义一些接口用来辅助我们的编码,这样就会使得本应轻量级的lambda表达式又变得重量级.那是否存在解决 ...
- Cron表达式详解和表达式的验证
Cron表达式详解和表达式的验证 本篇不算原创,因为主要内容来自网上的博客,所以给出我参考文章的链接. 本文cron表达式详解的大部分内容参考了[cron表达式详解]和Quartz使用总结.Cron表 ...
- Lambda 表达式详解~Lambda与集合
我们先从最熟悉的*Java集合框架(Java Collections Framework, JCF)*开始说起. 为引入Lambda表达式,Java8新增了java.util.funcion包,里面包 ...
- java lambda表达式详解_Lambda表达式详解
1 Lambda表达式是Java8中的新特性 Java8中引入Lambda表达式,使得java可以函数式编程,在并发性能上迈出了实质性的一步. 什么是函数式编程?函数式编程(英语:functional ...
- java验证cron表达式_Cron表达式详解和表达式的验证
本篇不算原创,因为主要内容来自网上的博客,所以给出我参考文章的链接. 本文cron表达式详解的大部分内容参考了[cron表达式详解]和Quartz使用总结.Cron表达式 这两篇文章. 一.表达式组成 ...
- 万字详解Lambda、Stream和日期
作者:虚无境 来源:cnblogs.com/xuwujing/p/10145691.html 前言 本篇主要讲述是Java中JDK1.8的一些语法特性的使用,主要是Lambda.Stream和Loca ...
- JDK8新特性详解Lambda、StreamAPI、Optional等
JDK8学习笔记 学习视频地址:https://www.bilibili.com/video/BV1k64y1R7sA 操作代码:https://gitee.com/rederic/study-jdk ...
- T-SQL查询——详解公用表达式(CTE)
对于Select查询语句来说,通常情况下,为了是T-SQL代码更加简洁和刻度,在一个查询中应用另外的结果集都是通过视图而不是查询进行分解的,但是,视图作为系统对象存储在数据库中,那对于结果集仅仅需要在 ...
- java 运算符_详解Java表达式与运算符
课程导言 [变量的赋值与计算都离不开表达式,表达式的运算依赖于变量.常量和运算符.本节课讨论Java的表达式的构成.常量的定义.运算符的分类及应用.通过本课的学习你将掌握运用表达式和运算符完成变量赋值 ...
最新文章
- C语言实验——求一个3*3矩阵对角线元素之和
- 补充spring事务传播性没有考虑的几种情况
- Android 常见内存泄漏及解决方法
- linux命令-eq是什么意思,linux查看系统信息命令
- vue 截取视频第一帧
- IDEA配置hadoop依赖jar包(非Maven)
- fc安卓模拟器_跨平台游戏模拟器RetroArch,一个软件畅玩FC 、MD、SFC、GBA游戏
- 硕士毕业论文框架怎么搭建?
- ASC制动效果成因个人理解
- 蓝桥杯:真题 回文数字
- 自动驾驶、无人驾驶、车联网笔记分享
- 一位500强高管的忠告:怕你胸有鸿鹄之志,手无缚鸡之力
- 将numeric转换为数据类型numeric是出现算术溢出错误
- Solidity语言详解
- C++ 命名空间,也有叫名称空间
- kaggle数据集下载步骤
- css简单实现一类卡片(自用笔记)
- 大四最后一个学期去公司实习前2天的一点感悟
- 字、字节、位(word、byte、bit)的关系
- 带宽,吞吐量描述与区别 影响吞吐量因素