原文链接: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语法(转)的更多相关文章

  1. SQL,LINQ,Lambda语法对照图(转载)

    如果你熟悉SQL语句,当使用LINQ时,会有似曾相识的感觉.但又略有不同.下面是SQL和LINQ,Lambda语法对照图 SQL LINQ Lambda SELECT * FROM HumanReso ...

  2. Lisp使用Lambda语法

    lamdba 其实就是一个匿名函数. 定义Lisp的lambda语法非常的简单,如下: (lambda ([parameter]) [experssion]) 调用lambda的语法有三种方法,如下: ...

  3. 初探Lambda表达式/Java多核编程【3】Lambda语法与作用域

    接上一篇:初探Lambda表达式/Java多核编程[2]并行与组合行为 本节是第二章开篇,前一章已经浅显地将所有新概念点到,书中剩下的部分将对这些概念做一个基础知识的补充与深入探讨实践. 本章将介绍L ...

  4. Lambda语法篇

    函数式接口 函数式接口(functional interface 也叫功能性接口,其实是同一个东西).简单来说,函数式接口是只包含一个方法的接口. Lambda语法 包含三个部分 一个括号内用逗号分隔 ...

  5. 通过这些示例快速学习Java lambda语法

    对于那些不熟悉函数式编程的人来说,基本的Java lambda语法起初可能有点令人生畏.但是,一旦将lambda表达式分解为它们的组成部分,语法很快就会变得有意义并变得非常自然. Java中lambd ...

  6. java1.8学习-什么样的匿名内部类能被lambda语法代替?

    java1.8学习-什么样的匿名内部类能被lambda语法代替? java1.8好多新的特性真的很有意思,特别是Lambda.在学习的时候发现并不是所有的匿名内部类都可以用Lambda代替. lamb ...

  7. Java进阶篇之十五 ----- JDK1.8的Lambda、Stream和日期的使用详解(很详细)

    前言 本篇主要讲述是Java中JDK1.8的一些新语法特性使用,主要是Lambda.Stream和LocalDate日期的一些使用讲解. Lambda Lambda介绍 Lambda 表达式(lamb ...

  8. JDK1.8 之Lambda

    Lambda 理解的了很久才有一点小感觉. 语法 lambda表达式的特点,它的语法如下面. parameter -> expression body 下面是一个lambda表达式的重要特征. ...

  9. Lambda 语法

    1.java8 Lambda表达式语法简介 (此处需要使用jdk1.8或其以上版本) Lambd表达式分为左右两侧 * 左侧:Lambda 表达式的参数列表 * 右侧:Lambda 表达式中所需要执行 ...

随机推荐

  1. 怎么应对 domino文档损坏然后损坏文档别删除导致数据丢失

    对于domino 有个机制是同步 ..然后如果文档被损坏之后会通过同步或者压缩 之类的 然后将损坏文档删除 那么这样就有个风险..知识管理文档会被删除. 并且删除了之后管理员如果不仔细看日志的话也不会 ...

  2. 【PGM】Representation--Knowledge Engineering,不同的模型表示,变量的类型,structure & parameters

    Part 1. 重要的区别: Template based   vs.   specific Directed  vs.  undirected Generative  vs.  discrimina ...

  3. 一个很大的文件,存放了10G个整数的乱序数列,如何用程序找出中位数。

    一.梳理审题 一.看清题目: 注意这个题目的量词,这个文件中有10G个整数,而不是这个文件占了10G的内存空间. 二.一些疑问: 在计算机中我们讲的G.M等都是存储容量的概念,但是一般都会在会面加上B ...

  4. VS2010/MFC编程入门之二十(常用控件:静态文本框)

    上一节鸡啄米讲了颜色对话框之后,关于对话框的使用和各种通用对话框的介绍就到此为止了.从本节开始鸡啄米将讲解各种常用控件的用法.常用控件主要包括:静态文本框.编辑框.单选按钮.复选框.分组框.列表框.组 ...

  5. 13信号signal

    信号 传送给进程的事件通知,完成异步通信 信号的产生 1.程序错误:硬件异常,除数为0,等 2.外部事件:定时器事件,按键中断(ctrl+c)等 3.显示请求:调用 kill,  raise 等信号发 ...

  6. jQuery源码分析--Event模块(3)

    最后剩下了事件的手动触发了.jQuery提供了两个函数trigger和triggerHandler来手动触发事件,可以触发原生事件和自定义的事件.这个触发不单只会触发有jQuery绑定事件,而且也会触 ...

  7. “System.Runtime.InteropServices.COMException (0x80070422): 无法启动服务”解决方法

    应用程序中发生了无法处理的异常.如果单击“退出”,应用程序将立即关闭.无法启动服务,原因可能是已被禁用或其相关联设备没有启动.(异常来自HRESULT:0X80070422).点击详细内容:有关调用实 ...

  8. bzoj1626 / P2872 [USACO07DEC]道路建设Building Roads

    P2872 [USACO07DEC]道路建设Building Roads kruskal求最小生成树. #include<iostream> #include<cstdio> ...

  9. 20145339顿珠达杰 《网络对抗技术》 逆向与Bof基础

    目的 通过一些方法,使能够运行本不该被运行的代码部分,或得到shell的使用: 将正常运行代码部分某处call后的目标地址,修改为另一部分我们希望执行.却本不应该执行的代码部分首地址(这需要我们有一定 ...

  10. arm-linux-ld命令

    我们对每个c或者汇编文件进行单独编译,但是不去连接,生成很多.o 的文件,这些.o文件首先是分散的,我们首先要考虑的如何组合起来:其次,这些.o文件存在相互调用的关系:再者,我们最后生成的bin文件是 ...