1、Lambda表达式

1.1、定义

lambda表达式是对于函数式接口(只含有一个抽象方法的接口)的简洁实现方式。它与匿名内部类的作用相似,但是就使用范围而言,匿名内部类更为广泛,而lambda表达式则更为简洁。

1.2、使用

lambda表达式的写法:

(需要实现的方法的参数)->{对于方法的具体实现}

代码展示:

先定义一个函数式接口,并定义方法使用函数式接口。

//函数式接口
interface Cook{
//无参数无返回值的抽象方法
public void cooking(String person);
}
//函数式接口作为方法的参数使用
public static void invokeCook(String person,Cook cook){
cook.cooking(person);
}

若使用匿名内部类进行实现:

//使用匿名内部类实现Cook接口中的方法重写
invokeCook("小明", new Cook() {
@Override
public void cooking(String person) {
System.out.println(person+"快做饭");
}
});

改用lambda表达式优化:

 //使用lambda表达式实现Cook接口中的方法重写
invokeCook("小明",(person)->{
System.out.println(person+"快做饭");
});
}

使用lambda表达式传参时,()中所传入的参数名可以不带类型标识符,但参数名必须于函数式接口中的方法的形参名保持一致。当lambda表达式要传递的参数为单参,且实现语句为单句时,可改写为如下形式:

 //使用lambda表达式实现Cook接口中的方法重写
invokeCook("小明",person->System.out.println(person+"快做饭");
);
}

1.3、总结

(1) lambda表达式针对于函数式接口使用,使用形式简便,使用范围较小。

(2) lambda表达式是匿名内部类的进一步提炼优化,称为匿名内部类的语法糖。

(3) lambda表达式()中传入的参数是要实现的函数式接口中的抽象方法的形参。

2、方法引用

2.1、定义

方法引用是用来直接访问类或者实例已经存在的方法(注意:不是创建或实现方法)或者构造方法。方法引用提供了一种引用而不执行方法的方式,它需要由兼容的函数式接口构成的目标类型上下文。运行时,方法引用会创建函数式接口的一个实例。

2.2、使用

方法引用的写法:类名::已存在的方法

代码展示

先定义一个函数式接口,并定义方法使用函数式接口。

//函数式接口
@FunctionalInterface
interface Printable{
//打印字符串的抽象方法
void printMethod(String s);
}
//定义一个方法,参数传入函数式接口,对字符串进行打印
public static void printString(Printable p){
p.printMethod("hellowrold");
}

若使用匿名内部类进行实现:

 //使用匿名内部类实现
printString(new Printable() {
@Override
public void printMethod(String s) {
System.out.println(s);
}
});

改用lambda表达式优化:

 //调用printString方法,因为参数是函数式接口,可以使用Lambda表达式
printString((s)->{
System.out.println(s);
});

用方法引用优化:

 //使用方法引用
//对象System.out已经存在,方法println也已经存在,
//可直接使用方法引用简化lambda表达式。
printString(System.out::println);

2.3、总结

(1)方法引用仅针对于函数式接口使用,调用函数式接口的抽象方法时,类名::方法表示的就是对于抽象方法的实现代码;调用其他方法时,都是只能调用类中已经存在的方法。

(2)方法引用与lambda表达式相比较,方法引用的使用范围更小,方式更简洁,便于在大量复用

(3)总体而言,方法引用是lambda表达式的语法糖。

Java提升二:Lambda表达式与方法引用的更多相关文章

  1. Java函数式编程:一、函数式接口,lambda表达式和方法引用

    Java函数式编程 什么是函数式编程 通过整合现有代码来产生新的功能,而不是从零开始编写所有内容,由此我们会得到更加可靠的代码,并获得更高的效率 我们可以这样理解:面向对象编程抽象数据,函数式编程抽象 ...

  2. java8的新特性之lambda表达式和方法引用

    1.1. Lambda表达式 通过具体的实例去体会lambda表达式对于我们代码的简化,其实我们不去深究他的底层原理和背景,仅仅从用法上去理解,关注两方面: lambda表达式是Java8的一个语法糖 ...

  3. JAVA8之Lambda表达式与方法引用表达式

    一.Lambda表达式 基本语法: lambdaParameters->lambdaBody lambdaParameters传递参数,lambdaBody用于编写逻辑,lambda表达式会生成 ...

  4. java8 探讨与分析匿名内部类、lambda表达式、方法引用的底层实现

    问题解决思路:查看编译生成的字节码文件 目录 测试匿名内部类的实现 小结 测试lambda表达式 小结 测试方法引用 小结 三种实现方式的总结 对于lambda表达式,为什么java8要这样做? 理论 ...

  5. Java 8中Lambda表达式默认方法的模板方法模式,你够了解么?

    为了以更简单的术语描述模板方法,考虑这个场景:假设在一个工作流系统中,为了完成任务,有4个任务必须以给定的执行顺序执行.在这4个任务中,不同工作流系统的实现可以根据自身情况自定义任务的执行内容. 模板 ...

  6. Java 8 Lambda表达式之方法引用 ::双冒号操作符

    双冒号运算符就是java中的方法引用,方法引用的格式是类名::方法名. 这里只是方法名,方法名的后面没有括号“()”.--------> 这样的式子并不代表一定会调用这个方法.这种式子一般是用作 ...

  7. Lambda表达式和方法引用

    1 , 为什么用lambda表达式 将重复固定的代码写法简单化 2   ,lambda表达式的实质 对函数式接口的实现(一个接口中只有一个抽象方法的接口被称为函数式接口) package com.mo ...

  8. 一文带你深入了解 Lambda 表达式和方法引用

    前言 尽管目前很多公司已经使用 Java8 作为项目开发语言,但是仍然有一部分开发者只是将其设置到 pom 文件中,并未真正开始使用.而项目中如果有8新特性的写法,例如λ表达式.也只是 Idea Al ...

  9. lambda表达式之方法引用

    /** * 方法引用提供了非常有用的语法,可以直接引用已有Java类或对象(实例)的方法或构造器.<br> * 与lambda联合使用,方法引用可以使语言的构造更紧凑简洁,减少冗余代码. ...

随机推荐

  1. win10 免安装版本的MySQL的下载安装和配置

    一.概述 网上找了好多,发现好多不是linux系统的就是与现在新版本有出入,自己做小项目亲手实践了一下,供大家借鉴. MySQL版本:mysql-5.7.17 下载方法: 1.MySQL官方网址htt ...

  2. php的弱类型比较

    1.==和=== ==为弱相等,也就是说12=="12" --> true,而且12=="12cdf" --> true,只取字符串中开头的整数部分 ...

  3. teraterm中log中加入时间戳

    步骤: 1.Setup->Additional settings->log->Timestamp(Local Time) 2.记录log.File->log(Teraterm. ...

  4. js 模拟鼠标拖动

    window.addEventListener('message', function (event) { if (event.source != window) return; if (event. ...

  5. windows通过zip安装mysql5.7.26的一个坑

    需要将my.ini的 红框的/不能写成\ 注意编码格式问题 然后 mysqld --initialize-insecure mysqld --install net start mysql

  6. Electromagnetic

    1. 电磁辐射 2. 电磁频谱 3. 可见光 4. 微波 5. 更多相关链接 1. 电磁辐射 https://en.wikipedia.org/wiki/Electromagnetic_radiati ...

  7. [理解] Linux 作为一个服务器是怎样的存在 (一)

    长期以来我就一直有一个疑问, 为什么当我们选择使用服务器的时候都会选择 Linux 作为操作系统, 以至于只要说到服务器就会不由自主的想到Linux, 那么Linux到底是什么呢? 当然我也不会妄谈天 ...

  8. python中if语句和循环语句

    //2019.12.05 python循环控制结构(一)控制循环结构 1-1 程序的判断语句与组合1.对于python的控制结构主要有以下三大类:(1)分支结构(2)循环结构(3)异常处理 2.pyt ...

  9. C语言动静态链接库使用(笔记)

    看了视频一直没空写........... C静态链接库不用说了跟你写在cpp文件里的函数一样不会有单独的模块 不再赘述生活中用的比较少 例子 .h文件 int Plus(int x, int y); ...

  10. kd-tree理论以及在PCL 中的代码的实现(转载)

    该文转自:https://www.cnblogs.com/li-yao7758258/p/6437440.html kd-tree理论以及在PCL 中的代码的实现   (小技巧记录:博客园编辑的网页界 ...