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表达式的更多相关文章

  1. java8新特性lamda表达式在集合中的使用

    1.利用stream().forEach()循环处理List; List<String> list = Lists.newArrayList();//新建一个List 用的google提供 ...

  2. Java8新特性-Lambda表达式是什么?

    目录 前言 匿名内部类 函数式接口 和 Lambda表达式语法 实现函数式接口并使用Lambda表达式: 所以Lambda表达式是什么? 实战应用 总结 前言 Java8新特性-Lambda表达式,好 ...

  3. 乐字节-Java8新特性-Lambda表达式

    上一篇文章我们了解了Java8新特性-接口默认方法,接下来我们聊一聊Java8新特性之Lambda表达式. Lambda表达式(也称为闭包),它允许我们将函数当成参数传递给某个方法,或者把代码本身当作 ...

  4. java8新特性——Lambda表达式

    上文中简单介绍了一下java8得一些新特性,与优点,也是为本次学习java8新特性制定一个学习的方向,后面几篇会根据上文中得新特性一一展开学习.本文就从java8新特性中比较重要的Lambda表达式开 ...

  5. Java8 新特性 Lamdba表达式

    Lamdba 表达式为什么出现   Java8是自java延生以来最大的改变,他允许java中的方法和函数成为一等公民(可以在方法间传递),所以就应运而出现了Lamdba表达式,他可以将表达式传递给另 ...

  6. Java8 新特性_Lambda 表达式

    1. Java8新特性_简介 Lambda 表达式 函数式接口 方法引用与构造器引用 Stream API 接口中的默认方法与静态方法 新时间日期 API 减少空指针异常的容器 Optional 2. ...

  7. Java8新特性: lambda 表达式介绍

    一.lambda 表达式介绍 lambda 表达式是 Java 8 的一个新特性,可以取代大部分的匿名内部类,简化了匿名委托的使用,让你让代码更加简洁,优雅. 比较官方的定义是这样的: lambda ...

  8. Java8新特性 - Lambda表达式 - 基本知识

    A lambda expression is an unnamed block of code (or an unnamed function) with a list of formal param ...

  9. java8新特性-lambda表达式和stream API的简单使用

    一.为什么使用lambda Lambda 是一个 匿名函数,我们可以把 Lambda表达式理解为是 一段可以传递的代码(将代码像数据一样进行传递).可以写出更简洁.更灵活的代码.作为一种更紧凑的代码风 ...

随机推荐

  1. 微信Android热补丁实践演进之路

    版权声明:本文由张绍文原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/81 来源:腾云阁 https://www.qclou ...

  2. cursor:hand & cursor:pointer

    1.cursor:hand & cursor:pointer都是将鼠标设置为手形. 2.cursor:hand存在兼容性问题,firefox并不支持该属性值.但大部分主流浏览器支持cursor ...

  3. js的字符串charAt()方法

    //字符中的字符从左向右进行索引,由0开始,字符串中的空格也算在内 var string = "charAt find word position"; document.write ...

  4. 删除lv

    author: headsen  chen date: 2018-09-12  11:52:02 [root@sz02 ~]# umount /var/lib/docker [root@sz02 ~] ...

  5. Egret P2 ( 一) 掉落的小球

    实际效果(蛋疼这个gif制作软件,帧率太低....): 一 Egret和P2的坐标系 首先了解下P2和Egret的坐标系. 某人链接:http://blog.csdn.net/qilei2010/ar ...

  6. html to pdf小工具,支持evernote导出的html和firefox插件scrapbook

    周末花了一天时间用wpf写了一个html转换为pdf的小工具. 已经在win7 32位 和win8 64两台机器上测试,目前基本可用,特拿来分享. 程序下载地址:http://pan.baidu.co ...

  7. ZoomIt v4.5

    https://technet.microsoft.com/en-us/sysinternals/bb897434.aspx zoomIt: 演示必备辅助软件 ZoomIt(主页|介绍)是一款非常实用 ...

  8. ios 在UIView上画图,线条

    1.画线条(实线,虚线) - (void)drawRect:(CGRect)rect {     CGContextRef context = UIGraphicsGetCurrentContext( ...

  9. go练习5--生成md5

    import "crypto/md5" import "encoding/hex" //go 生成 md5 func T4_1() { m := md5.New ...

  10. centos7.2启动级别

    systemctl set-default multi-user.target      设定默认为字符界面,也就是3 systemctl set-default graphical.target  ...