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表达式能简化集合上数据的多线程或者多核的处理,提供更快的集合处理速度 */ }