• Lambda表达式


    先看个小示例:

    package ..lambda.test01;
    
    /**
     * @author : 
     */
    public interface TestInterface {
        void testMethod();
    }
    
    class MyClass implements TestInterface{
        @Override
        public void testMethod() {
            System.out.println("重新实现了testMethod方法。。");
        }
    }
    
    class Demo{
        public static void main(String[] args) {
            //创建接口对应的实现类的对象:
            TestInterface t = new MyClass();
            t.testMethod();
            
            
    
            TestInterface T = new TestInterface() {
                @Override
                public void testMethod() {
                    System.out.println("重写了testMethod方法,匿名内部类中的实现");
                }
            };
            T.testMethod();
    
            
            TestInterface t = () -> System.out.println("这个是Lambda表达式的实现方式");
            t.testMethod();
    
            
            
            
            打印:重新实现了testMethod方法。。
                  重写了testMethod方法,匿名内部类中的实现
                  这个是Lambda表达式的实现方式
            
    
            /*
            总结:
            1.Lambda表达式是一个新的语法结构
            2.语法层面简洁了
            3.Lambda表达式的本质就是:接口的实现类的具体的对象
            4.应用场合:复用性没有那么强的时候
            5.语法:
            -> 箭头操作符  Lambda操作符
            ->左侧:  Lambda的形参列表 ---等效于  对应的接口的那个抽象方法的 形参列表
            ->右侧: 其实就是抽象方法的方法体
             */
        }
    }
    语法结构1:无参,无返回值:

    package ..lambda.test02;
    
    /**
     * @author : -
     * 语法结构1:无参,无返回值
     */
    public interface TestInterface {
        void testMethod();
    }
    
    class Test01{
        //这是main方法,程序的入口
        public static void main(String[] args) {
    
            TestInterface ttt = new TestInterface() {
                @Override
                public void testMethod() {
                    System.out.println("ttt");
                }
            };
            ttt.testMethod();
    
    
            TestInterface tt = () -> {
                System.out.println("tt");
            };
            tt.testMethod();
    
    
            TestInterface t = () -> System.out.println("t       这是一个无参的,无返回值的方法");
            t.testMethod();
    
            
            打印:
            ttt
            tt
            t       这是一个无参的,无返回值的方法
            
            /*
            注意1:如果方法体中只有一句话的时候,{}可以省略不写
             */
    
        }
    }

    语法结构02:有一个参数,无返回值:

    package ..lambda.test02;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * @author : -
     * 语法结构02:有一个参数,无返回值:
     */
    public interface TestInterface02 {
        void testMethod(int num);
    }
    
    class Demo01{
        //这是main方法,程序的入口
        public static void main(String[] args) {
    
            TestInterface02 ttt = new TestInterface02() {
                @Override
                public void testMethod(int x) {
                    System.out.println("这个方法的参数为:" + x);
                }
            };
            ttt.testMethod(30);
    
    
            TestInterface02 tt = (x) -> System.out.println("这个方法的参数为:" + x);
            tt.testMethod(20);
    
    
            TestInterface02 t = x -> System.out.println("这个方法的参数为:" + x);
            t.testMethod(10);
            
            
    
            打印:这个方法的参数为:30
                  这个方法的参数为:20
                  这个方法的参数为:10
    
            /*
            注意:
            1.参数名字随便起
            2.参数的类型可以省略 - 》上下文有类型推断
            3.参数只有一个的话,()可以省略
             */
    
        }
    }

    语法结构3:两个或者两个以上的参数,有返回值:

    package ..lambda.test02;
    
    /**
     * @author : -
     * 语法结构3:两个或者两个以上的参数,有返回值
     */
    @FunctionalInterface
    public interface TestInterface03 {
        int testMethod(int num1, int num2);
    }
    
    class Demo03{
    
        public static void main(String[] args) {
    
            TestInterface03 ttt = new TestInterface03() {
                @Override
                public int testMethod(int x, int y) {
                    System.out.println("参数为: "+x+"   "+y);
                    return 444;
                }
            };
            System.out.println(ttt.testMethod(10,20));
    
    
            TestInterface03 tt = (x, y) -> {
                System.out.println("两个或者两个以上的参数,有返回值" + x + "---" + y);
                return 555;
            };
            System.out.println(tt.testMethod(10,20));
    
    
            TestInterface03 t = (x,y) -> 666;
            System.out.println(t.testMethod(10, 20));
            
            
            打印:  参数为: 10   20
                    444
                    两个或者两个以上的参数,有返回值10---20
                    555
                    666
    
            /*
            1.多个参数的话,()不可以省略
            2.方法体中有多个逻辑的话,{}也不可以省略
            3.如果方法体中只有一句话,并且这句话是返回值那句的话,{}可以省略,return关键字也可以省略的
    
            总结:能省则省
    
            Lambda表达式使用的那个接口 ,有个特点:里面只有一个抽象方法 ----》函数式接口
            通过注解:@FunctionalInterface  来限定函数式接口
    
             */
        }
    }
  • 相关阅读:
    字符串与Unicode码的相互转换
    关于es6中的yield
    ajax请求中的6个全局事件
    用H5上传文件
    类型化数组
    git笔记-9-29
    js正则表达式验证身份证号和密码
    assertThat用法
    java产生随机数的几种方式
    jQuery之Deferred对象详解
  • 原文地址:https://www.cnblogs.com/lifan12589/p/13955075.html
Copyright © 2020-2023  润新知