JAVA8新特性——Lamda表达式
JAVA9都要出来了,JAVA8新特性都没搞清楚,是不是有点掉队哦~
Lamda表达式,读作λ表达式,它实质属于函数式编程的概念,要理解函数式编程的产生目的,就要先理解匿名内部类。
先来看看传统的匿名内部类调用方式:
interface MyInterface{
void lMethod();
}
public class Main {
public static void test(MyInterface myInterface){
myInterface.lMethod();
}
public static void main(String[] args) {
test(new MyInterface() {
@Override
public void lMethod() {
System.out.println("Hello World!");
}
});
}
}
在主类中的这么几行代码,嵌套几层就为了输出一个Hello World!是不是很麻烦?但是由于java结构的完整性,我们还不得不那么做,现在JDK1.8来了。
再来看看使用Lamda表达式改写上面的代码:
interface MyInterface{
void lMethod();
}
public class Main {
public static void test(MyInterface myInterface){
myInterface.lMethod();
}
public static void main(String[] args) {
test(()->System.out.println("Hello World!"));
}
}
这就是Lamda表达式语言,为了解决匿名内部类繁杂的操作而出现。
Lamda语法有三种形式:
- (参数) ->单行语句;
- (参数) ->{多行语句};
- (参数) ->表达式;
括号()可以大致理解为就是方法,里面是参数变量,在上面的例子中()->System.out.println("Hello World!") 前面的()代表void lMethod()方法,它没有入参,所以为空,->后面是一个单行语句;
如果->后面是多行语句,需要用{ }装起来,每条语句后需要有分号;
->后面也可以是一个表达式,如:a+b等。
(参数) ->单行语句:
interface MyInterface{
void lMethod(String str);
}
public class Main {
public static void test(MyInterface myInterface){
myInterface.lMethod("Hello World!");//设置参数内容
}
public static void main(String[] args) {
//首先在()中定义此表达式里面需要接收变量s,后面的单行语句中就可以使用该变量了
test((s)->System.out.println(s));
}
}
(参数) ->{多行语句}:
interface MyInterface{
void lMethod(String str);
}
public class Main {
public static void test(MyInterface myInterface){
myInterface.lMethod("Hello World!");//设置参数内容
}
public static void main(String[] args) {
//首先在()中定义此表达式里面需要接收变量s,后面的多行语句中就可以使用该变量了。注意:多行语句别少“;”号
test((s)->{
s=s+s;
System.out.println(s);
});
}
}
(参数) ->表达式:
interface MyInterface{
int lMethod(int a,int b);
}
public class Main {
public static void test(MyInterface myInterface){
int result=myInterface.lMethod(1,2);//设置参数内容,接收返回参数
System.out.println(result);
}
public static void main(String[] args) {
test((x,y)-> x*y );//调用方法
//相当于
// test((x,y)-> {return x*y;});
}
}
这样,Lamda表达式就看起来很简单了,有不有!
匿名内部类,我们比较常用的地方在哪儿?线程类Thread,以前我们可能这样写:
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("线程操作!");
}
});
现在,使用Lamda表达式,简单写为:
new Thread(()->System.out.println("线程操作!"));
总结:利用Lamda表达式是为了避免匿名内部类定义过多无用的操作。
JAVA8新特性——Lamda表达式的更多相关文章
- java8新特性lamda表达式在集合中的使用
1.利用stream().forEach()循环处理List; List<String> list = Lists.newArrayList();//新建一个List 用的google提供 ...
- Java8新特性-Lambda表达式是什么?
目录 前言 匿名内部类 函数式接口 和 Lambda表达式语法 实现函数式接口并使用Lambda表达式: 所以Lambda表达式是什么? 实战应用 总结 前言 Java8新特性-Lambda表达式,好 ...
- 乐字节-Java8新特性-Lambda表达式
上一篇文章我们了解了Java8新特性-接口默认方法,接下来我们聊一聊Java8新特性之Lambda表达式. Lambda表达式(也称为闭包),它允许我们将函数当成参数传递给某个方法,或者把代码本身当作 ...
- java8新特性——Lambda表达式
上文中简单介绍了一下java8得一些新特性,与优点,也是为本次学习java8新特性制定一个学习的方向,后面几篇会根据上文中得新特性一一展开学习.本文就从java8新特性中比较重要的Lambda表达式开 ...
- Java8 新特性 Lamdba表达式
Lamdba 表达式为什么出现 Java8是自java延生以来最大的改变,他允许java中的方法和函数成为一等公民(可以在方法间传递),所以就应运而出现了Lamdba表达式,他可以将表达式传递给另 ...
- Java8 新特性_Lambda 表达式
1. Java8新特性_简介 Lambda 表达式 函数式接口 方法引用与构造器引用 Stream API 接口中的默认方法与静态方法 新时间日期 API 减少空指针异常的容器 Optional 2. ...
- Java8新特性: lambda 表达式介绍
一.lambda 表达式介绍 lambda 表达式是 Java 8 的一个新特性,可以取代大部分的匿名内部类,简化了匿名委托的使用,让你让代码更加简洁,优雅. 比较官方的定义是这样的: lambda ...
- Java8新特性 - Lambda表达式 - 基本知识
A lambda expression is an unnamed block of code (or an unnamed function) with a list of formal param ...
- java8新特性-lambda表达式和stream API的简单使用
一.为什么使用lambda Lambda 是一个 匿名函数,我们可以把 Lambda表达式理解为是 一段可以传递的代码(将代码像数据一样进行传递).可以写出更简洁.更灵活的代码.作为一种更紧凑的代码风 ...
随机推荐
- 浏览器对js运行时间的限制
浏览器对js的运行时间进行了限制 1.调用栈尺寸限制 目前大部分的主流浏览器的调用栈尺寸都在10000以上.超过这个尺寸就会报栈溢出的错误 2.长时间脚本限制 浏览器记录一个脚本的运行时间,一旦达到这 ...
- ansible批量验证密码
author: headsen chen date: 2018-08-31 20:45:49 综合比较salt-ssh,ansible .sshpass等批量验证100台机器的密码,最好推荐用ans ...
- SElinux以及防火墙的关闭
[root@localhost targeted]# pwd/etc/selinux/targeted[root@localhost targeted]# getsebool -a|grep samb ...
- 【php】---mysql---基本操作及使用---【巷子】
1.数据库简介 (1).什么是数据库? 一个文件 一个文件夹 一个u盘 一个硬盘......都叫做数据库 存放数据的仓库 (2).常见的数据库? mySql sql ...
- javascript飞机大战-----008积分
/* 创建敌机: */ function Enemy(blood,speed,imgs,scroe){ //敌机left this.left = 0; //敌机top this.top = 0; // ...
- scrapy爬虫系列之五--CrawlSpider的使用
功能点:CrawlSpider的基本使用 爬取网站:保监会 主要代码: cf.py # -*- coding: utf-8 -*- import scrapy from scrapy.linkextr ...
- python re.sub 括号匹配替换匹配到的内容后接数字
如果代码为: text = re.sub(r'(?<=[{])([a-z]+)6(?=[}])', r'\13', text) 上面代码会报错,因为没有组合13,所以不能获得组合13的内容. 但 ...
- nodejs学习笔记Node.js 调试命令
3.4 调试 47 下面是一个简单的例子: $ node debug debug.js < debugger listening on port 5858 connecting ...
- ffmpeg应用笔记
官网 http://ffmpeg.org/ 应用手册 http://ffmpeg.org/documentation.html 雷霄骅专栏 https://blog.csdn.net/leixiaoh ...
- PAT Sum of Number Segments[数学问题][一般]
1104 Sum of Number Segments(20 分) Given a sequence of positive numbers, a segment is defined to be a ...