jdk1.8的lambda语法(转)
原文链接:http://www.jb51.net/article/115081.htm
代码:
package com.jdk_8; import org.junit.Test; import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent; /**
* Created by zhen on 2017-07-04.
*/
public class LambdaTest {
/**
* 函数式接口(function interface也叫功能性接口,其实是同一个东西)。简单来说,函数式接口只是包含一个方法的接口。比如java标准库中的
* java.lang.Runnable和java.util.Comparator都是典型的函数式接口。java 8 提供@FunctionInterface注解是必须的,只要接口复合函数式接口
* 的标准(即只包含一个抽象方法的接口),虚拟机会自动判断,但最好在接口上使用@FunctionInterface进行声明,以便其他人在接口中添加方法
* 。java的lambda无法单独出现,它需要一个函数式接口来盛放,lambda表达式方法体其实就是函数接口的实现。
*
* Lambda语法:
* 包含三个部分
* 1、一个括号内用逗号分隔的形式参数,参数是函数式接口里面方法的参数
* 2、一个箭头符号:->
* 3、方法体,可以是表达式和代码块,方法体函数接口里面方法的实现,如果是代码块,必须用{}来包裹起来,而且需要一个return返回值,但是
* 有个例外,若函数式接口里面的方法返回值是void,则无需{}
*/ public void test1(){
runThreadUseInnerClass();
runThreadUseLambda();
} public void runThreadUseLambda(){
new Thread(() -> System.out.println("lambda实现的线程")).start();
}
public void runThreadUseInnerClass(){
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("内部类实现的线程");
}
}).start();
} /**
* 方法引用
* 其实是lambda表达式的一个简化写法,所引用的方法起始是lambda表达式的方法实现,语法也很简单,左边是容器(可以是类名、实例名),中间
* 是“::”,右边是相应的方法名。
* 1、如果是静态方法,则是ClassName::methodName
* 2、如果是实例方法,则是Instance::methodName
* 3、构造函数,则是ClassName::new
*/
@Test
public void testMethodReference(){
JFrame frame = new JFrame();
frame.setLayout(new FlowLayout());
frame.setVisible(true); JButton button1 = new JButton("点我");
JButton button2 = new JButton("也点我");
frame.getContentPane().add(button1);
frame.getContentPane().add(button2);
//这里addActionListener方法的参数是ActionListener,是一个函数式接口
button1.addActionListener((e) -> {System.out.println("这里是Lambda的实现方式");});
button2.addActionListener(LambdaTest::doSomething);
/**
* 这里生成的窗体不能持久,可能少了点代码,忽略
* 可以看出,doSomething方法就是lambda表达式的实现,这样的好处就是,如果你觉得lambda的方法体会很长,影响代码可读性,方法引用就是个解决办法
*/
}
public static void doSomething(ActionEvent e){
System.out.println("这里是方法引用的实现方式");
} /**
* 以上就是lambda表达式语法的全部内容了。只是diamante简介这个好处的话,并不能打动很多观众,java 8 也不会那么令人期待,java 8 迫切引
* 入lambda是因为lambda表达式能简化集合上数据的多线程或者多核的处理,提供更快的集合处理速度
*/
}
jdk1.8的lambda语法(转)的更多相关文章
- SQL,LINQ,Lambda语法对照图(转载)
如果你熟悉SQL语句,当使用LINQ时,会有似曾相识的感觉.但又略有不同.下面是SQL和LINQ,Lambda语法对照图 SQL LINQ Lambda SELECT * FROM HumanReso ...
- Lisp使用Lambda语法
lamdba 其实就是一个匿名函数. 定义Lisp的lambda语法非常的简单,如下: (lambda ([parameter]) [experssion]) 调用lambda的语法有三种方法,如下: ...
- 初探Lambda表达式/Java多核编程【3】Lambda语法与作用域
接上一篇:初探Lambda表达式/Java多核编程[2]并行与组合行为 本节是第二章开篇,前一章已经浅显地将所有新概念点到,书中剩下的部分将对这些概念做一个基础知识的补充与深入探讨实践. 本章将介绍L ...
- Lambda语法篇
函数式接口 函数式接口(functional interface 也叫功能性接口,其实是同一个东西).简单来说,函数式接口是只包含一个方法的接口. Lambda语法 包含三个部分 一个括号内用逗号分隔 ...
- 通过这些示例快速学习Java lambda语法
对于那些不熟悉函数式编程的人来说,基本的Java lambda语法起初可能有点令人生畏.但是,一旦将lambda表达式分解为它们的组成部分,语法很快就会变得有意义并变得非常自然. Java中lambd ...
- java1.8学习-什么样的匿名内部类能被lambda语法代替?
java1.8学习-什么样的匿名内部类能被lambda语法代替? java1.8好多新的特性真的很有意思,特别是Lambda.在学习的时候发现并不是所有的匿名内部类都可以用Lambda代替. lamb ...
- Java进阶篇之十五 ----- JDK1.8的Lambda、Stream和日期的使用详解(很详细)
前言 本篇主要讲述是Java中JDK1.8的一些新语法特性使用,主要是Lambda.Stream和LocalDate日期的一些使用讲解. Lambda Lambda介绍 Lambda 表达式(lamb ...
- JDK1.8 之Lambda
Lambda 理解的了很久才有一点小感觉. 语法 lambda表达式的特点,它的语法如下面. parameter -> expression body 下面是一个lambda表达式的重要特征. ...
- Lambda 语法
1.java8 Lambda表达式语法简介 (此处需要使用jdk1.8或其以上版本) Lambd表达式分为左右两侧 * 左侧:Lambda 表达式的参数列表 * 右侧:Lambda 表达式中所需要执行 ...
随机推荐
- Mybatis三剑客之mybatis-generator配置
mybatis插件在这里: 然后把generatorConfig.xml文件放在resources下: <?xml version="1.0" encoding=" ...
- Maven的pom文件配置
pom.xml文件如下: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http:// ...
- 产品开发过程描述xmind
- ViewPager添加小圆点
ViewPager添加小圆点很简单,但是如果是网络图片可能就不太好做了,所以我这里给出一种方法,当然你也可以用其他的 1.主界面xml <?xml version="1.0" ...
- 迅雷7 纯净版v7.9.18.4724
http://soft2.xzstatic.com/2016/08/Thunder_7.9.13.4666_NoAD_VIP.exe http://www.downza.cn/soft/192064. ...
- Java压缩多个文件并导出
controller层: /** * 打包压缩下载文件 */ @RequestMapping(value = "/downLoadZipFile") public void dow ...
- idea中添加模板。
1:点击File>settings>live template 2: 在 Editor界面下,点击右上角 + 好, 如果想添加一个新类型的语言,点击templateGroup 输入组名. ...
- Spark Streaming带状态更新
带状态的更新是使用的updateStateByKey方法,里面传入一个函数,函数要自己写,注意需要设置checkpoint import org.apache.spark.streaming.kafk ...
- java多线程(五)
Java 多线程同步 锁机制与synchronized 打个比方:一个object就像一个大房子,大门永远打开.房子里有很多房间(也就是方法).这些房间有上锁的(synchronized方法), 和不 ...
- 7.3 Models -- Creating And Deleting Records
一.Creating 1. 你可以通过调用在store中的createRecord方法来创建records. store.createRecord('post', { title: 'Rails is ...