ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Lambda函数详解

2022-06-15 02:00:07  阅读:168  来源: 互联网

标签:函数 void 接口 LanbdaWay 详解 test new public 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();
    }
    
    
    
    
    
    

标签:函数,void,接口,LanbdaWay,详解,test,new,public,Lambda
来源: https://www.cnblogs.com/LazyJay/p/16376999.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有