Lambda函数详解


Lambda表达式详解

Lambda表达式作用

  1. 避免匿名内部类过多
  2. 简洁代码
  3. 此外,lambda表达式其实隶属于函数式编程

函数式接口(包含何为Lambda表达式)

  1. 任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口

    如下

    //这是一个只有一个抽象方法的接口interface(即函数式接口)
    public interface Runnable {
        public abstract void run();
        //直接写void run();也是一样的
    }
    
  2. 对于函数式接口,我们可以使通过lambda表达式来创建该接口的对象

    如下(1,2,4,5,6,7即为不断简化,最后到使用lambda表达式的过程)

    package com.xiaoke.study.day01.com.xiaoke.study.Demo04_Lambda;
    /**
     * 推导lambda表达式
     * */
    public class Lambda {
    
        //4.静态内部类
        static class Test3 implements LamTest{
            @Override
            public void LanbdaWay() {
                System.out.println("这是对于实现接口的静态内部类的方法");
            }
        }
    
        public static void main(String[] args) {
            /*
            * 下面这个叫做接口的实现类对象
            * 是java多态的一种体现
            * 作用看详解1
            * */
            LamTest test = new Test();
            test.LanbdaWay();
            //下面这个实现的是静态内部类
            test = new Test3();
            test.LanbdaWay();
    
            //5.局部内部类
            class Test4 implements LamTest{
                @Override
                public void LanbdaWay() {
                    System.out.println("这是对于实现接口的局部内部类的方法");
                }
            }
            //下面这个实现的是局部内部类
            test = new Test4();
            test.LanbdaWay();
    
            //6.匿名内部类 没有类的名称,只能借助接口或者父类
            test = new Test(){
                @Override
                public void LanbdaWay() {
                    System.out.println("这是对于实现接口的匿名内部类的方法");
                }
            };
    
            //7.用lambda简化
            test = ()->{
                System.out.println("这是用lambda简化后方法");
            };
    
    
    
        }
    
        Test test = new Test();
    
    }
    
    /*
    *详解1:接口的实现类可以有很多个,如 LinkedList或者Vector等等,
    * 如果使用这种方式,List list = new ArrayList<String>();  以后不想用ArrayList了,直接改为你想用的实现类,如List list = new LinkedList<String>();
    * 这样,虽然修改了实现类,但相关list调用方法的代码是不用修改的;如果是ArrayList list = new ArrayList<String>();
    * 这种写法,那就有可能要修改非常多代码了,因为,原本list调用了ArrayList中的方法来实现某个功能,再修改实现类过后,list原本调用的方法在LinkedList中不存在,则还要修改对应调用的方法
    *  */
    
    //1.定义一个只有一个抽象方法的接口(即函数式接口)
    interface LamTest{
        void LanbdaWay();
    }
    
    //2.定义一个方法,实现上面的这个接口
    class Test implements LamTest{
        @Override
        public void LanbdaWay() {
            System.out.println("这是对于实现接口的方法");
        }
    }
    
    
    //3.定义一个方法,解释详解1
    class Test2 implements LamTest{
        @Override
        public void LanbdaWay() {
            System.out.println("这是解释接口的实现类");
        }
    
        public void UniqueWay()
        {
            System.out.println("这是Test2独有的方法,如果用的是 Test test = new Test() 改成Test2 test = new Test2(),则UniqueWay就不能使用了");
        }
    }
    
    
    //此接口是为了说明,一个接口可以有多个函数,但是当接口只有一个方法的时候,才能用lambda简化接口的实现方法,即只有一个抽象方法的接口
    //才是   函数式接口
    interface LamTest2{
        void LanbdaWay();
        void LanbdaWay2();
    }
    
    
    
    
    
    

原创文章,作者:wure,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/267782.html

(0)
上一篇 2022年6月19日 01:07
下一篇 2022年6月19日 01:07

相关推荐

发表回复

登录后才能评论