美文网首页
Java8 Lambda 表达式

Java8 Lambda 表达式

作者: 酷酷的小k | 来源:发表于2019-01-22 15:16 被阅读0次
    package com.test.java8;
    
    /**
     * Lambda 表达式
     *
     * @author smallk
     * @date 2018/12/4 16:50
     */
    public class LambdaTest {
    
        public static void main(String[] args) {
            LambdaTest lambdaTest = new LambdaTest();
    
            // 无参输出
            NotParams notParams = () -> System.out.println("无参输出");
            lambdaTest.out(notParams);
    
            // 可选的大括号:如果主体包含了一个语句,就不需要使用大括号
            ExecuteStatement executeStatement = msg -> {
                msg += " World";
                System.out.println("世界语:" + msg);
            };
            lambdaTest.execute("Hello", executeStatement);
    
            // 可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号
            MathAbs mathAbs = a -> a < 0 ? -a : a;
            System.out.println("绝对值:" + lambdaTest.backAbs(-2, mathAbs));
    
            // 有参数类型声明
            MathOperation addition = (int a, int b) -> a + b;
            System.out.println("有参数类型声明:" + lambdaTest.operate(10, 2, addition));
    
            // 无参数类型声明
            MathOperation subtraction = (a, b) -> a - b;
            System.out.println("无参数类型声明:" + lambdaTest.operate(10, 5, subtraction));
    
            // 主体只有一个表达式返回值且使用了大括号则必须写 return 关键字
            MathOperation multiplication = (a, b) -> {
                return a * b;
            };
            System.out.println("大括号中的返回语句:" + lambdaTest.operate(3, 5, multiplication));
    
            // 主体只有一个表达式返回值且无大括号则编译器会自动返回值
            MathOperation division = (a, b) -> a / b;
            System.out.println("无大括号中的返回语句:" + lambdaTest.operate(15, 5, division));
    
            // 实现函数式接口
            GreetingService greetingService1 = msg -> System.out.println("msg:" + msg);
            greetingService1.sayMessage("你的名字");
    
            String salutation = "salutation:";
            // 报错 Variable used in lambda expression should be final or effectively final
            // salutation = "salutation:";
            GreetingService greetService2 = msg -> System.out.println(salutation + msg);
            greetService2.sayMessage("123");
    
            // 函数式接口另一种写法
            MathOperation mathOperation = (a, b) -> a + b;
            System.out.println(mathOperation.addition(4, 8));
        }
    
        /**
         * 函数式接口只能有一个抽象方法
         */
        interface NotParams {
    
            /**
             * 无参输出
             */
            void out();
        }
    
        private void out(NotParams notParams) {
            notParams.out();
        }
    
        /**
         * 函数式接口只能有一个抽象方法
         */
        interface ExecuteStatement {
    
            /**
             * 执行代码
             *
             * @param msg msg
             */
            void execute(String msg);
        }
    
        private void execute(String msg, ExecuteStatement executeStatement) {
            executeStatement.execute(msg);
        }
    
        /**
         * 函数式接口只能有一个抽象方法
         */
        interface MathAbs {
    
            /**
             * 返回绝对值
             *
             * @param a a
             * @return int
             */
            int backAbs(int a);
        }
    
        private int backAbs(int a, MathAbs mathAbs) {
            return mathAbs.backAbs(a);
        }
    
        /**
         * 函数式接口只能有一个抽象方法
         */
        interface MathOperation {
    
            /**
             * 加减乘除操作
             *
             * @param a a
             * @param b b
             * @return int
             */
            int operation(int a, int b);
    
            /**
             * 修饰符只能是default
             *
             * @param a a
             * @param b b
             * @return int
             */
            default int addition(int a, int b) {
                return a + b;
            }
        }
    
        private int operate(int a, int b, MathOperation mathOperation) {
            return mathOperation.operation(a, b);
        }
    
        /**
         * 函数式接口只能有一个抽象方法
         */
        interface GreetingService {
    
            /**
             * sayMessage
             *
             * @param msg String
             */
            void sayMessage(String msg);
        }
    }
    

    源于:http://www.runoob.com/java/java8-lambda-expressions.html

    相关文章

      网友评论

          本文标题:Java8 Lambda 表达式

          本文链接:https://www.haomeiwen.com/subject/manljqtx.html