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 表达式中所需要执行 ...
随机推荐
- android qq开合表
qq悬浮列表功能暂未实现 main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/andr ...
- Hyperledger Fabric 开发环境搭建 centos7系统
一.安装GO语言 下载最新版的go 打开Terminal,输入命令(以下命令都是以root管理员的角色进行的) su 输入密码:***** wget https://storage.googleapi ...
- java基础语法this关键字
未经允许,禁止转载!!!!!!!! this关键词在java里面很重要,想了解清楚this就必须对 类:对象:this:成员变量:方法:构造方法 都了解清楚. 一.使用this调用本类中的成员变量( ...
- 4.3 Routing -- Generated Objects
就像在routing guide中介绍的那样,不管什么时候你在路由器中定义一个新路径,Ember.js就会尝试寻找一个对应的route,controller,template,它们的命名都是根据命名约 ...
- Hadoop mapreduce自定义分组RawComparator
本文发表于本人博客. 今天接着上次[Hadoop mapreduce自定义排序WritableComparable]文章写,按照顺序那么这次应该是讲解自定义分组如何实现,关于操作顺序在这里不多说了,需 ...
- zw版【转发·台湾nvp系列Delphi例程】HALCON DispArc
zw版[转发·台湾nvp系列Delphi例程]HALCON DispArc zw版[转发·台湾nvp系列Delphi例程]HALCON DispArc----------RAD Studio XE D ...
- 免费美女视频聊天,多人视频会议功能加强版本(Fms3和Flex开发(附源码))
Flex,Fms3系列文章导航 Flex,Fms3相关文章索引 本篇是视频聊天,会议开发实例系列文章的第4篇,该系列所有文章链接如下: http://www.cnblogs.com/aierong/a ...
- Core Java 3
p270~p272 1.创建异常类. 步骤:1)定义一个派生于(继承)Exception或者其子类的类. 2)添加两个构造方法:一个是默认构造器,另一个是带有详细描述信息的构造器. import ja ...
- 五,动态库(dll)的封装与使用
在项目开发中,我们经常会使用到动态库(dll),要么是使用别人的动态库,要么是将功能函数封装为动态库给别人用.那么如何封装和使用动态库呢?以下内容为你讲解. 1.动态库的封装 以vs2010为例,我们 ...
- 使用 log4js UDP 发送数据到 logstash
本文地址 http://www.cnblogs.com/jasonxuli/p/6532723.html 因为 nodejs 一般会部署在多台机器,并且每台机器会起多个进程,因此查看日志时往往要人工区 ...