• 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表达式能简化集合上数据的多线程或者多核的处理,提供更快的集合处理速度
         */
    }
  • 相关阅读:
    quotaon
    quotacheck
    quota
    query_module
    数据库连接驱动
    PHP 开发 APP 接口 学习笔记与总结
    Java实现 LeetCode 76 最小覆盖子串
    Java实现 LeetCode 74 搜索二维矩阵
    Java实现 LeetCode 74 搜索二维矩阵
    Java实现 LeetCode 74 搜索二维矩阵
  • 原文地址:https://www.cnblogs.com/aigeileshei/p/7116486.html
Copyright © 2020-2023  润新知