zoukankan      html  css  js  c++  java
  • Lambda表达式

    什么是函数式接口 ?

    任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口。
    对于函数式接口,我们可以通过 Lambda 表达式来创建该接口的对象。

    推导Lambda表达式

    首先声明一个函数式接口

    1. 普通的接口实现类
    2. 静态内部类
    3. 局部内部类
    4. 匿名内部类
    5. Lambda表达式
    package com.zhang.lambda;
    
    /*
    #### 推导 Lambda 表达式
     */
    public class TestLambda1 {
    
        //3.静态内部类
        static class Like2 implements ILike {
            @Override
            public void lambda() {
                System.out.println("I like lambda2...");
            }
        }
    
        public static void main(String[] args) {
            ILike like = new Like();
            like.lambda();
    
            like = new Like2();
            like.lambda();
    
            //4.局部内部类
            class Like3 implements ILike {
                @Override
                public void lambda() {
                    System.out.println("I like lambda3...");
                }
            }
    
            like = new Like3();
            like.lambda();
    
            //5.匿名内部类,没有类的名称,必须借助接口或者父类
            like = new ILike() {
                @Override
                public void lambda() {
                    System.out.println("I like lambda4...");
                }
            };
            like.lambda();
    
            //6.用 lambda 简化, 由于只有一个接口,且其中只有一个方法,只需保留方法体即可
            like = () ->  {
                System.out.println("I like lambda5...");
            };
            like.lambda();
        }
    }
    
    //1.定义一个函数式接口
    interface ILike {
        void lambda();
    }
    
    //2.实现类
    class Like implements ILike {
        @Override
        public void lambda() {
            System.out.println("I like lambda...");
        }
    }
    
    

    Lambda 表达式的简化

    1. 去掉参数类型
    2. 简化括号
    3. 去掉 {}
    package com.zhang.lambda;
    
    public class TestLambda2 {
    
        public static void main(String[] args) {
    
            // lambda表示简化
            ILove love = (int a) -> {
                    System.out.println("I love you -> " + a);
                };
    
            //简化1:参数类型
            love = (a) -> {
                System.out.println("I love you ->" + a);
            };
    
            //简化2:简化括号
            love = a -> {
                System.out.println("I love you ->" + a);
            };
    
            //简化3:去掉 {}
            love = a -> System.out.println("I love you ->" + a);
    
            love.love(520);
        }
    
    }
    
    interface ILove {
        void love(int a);
    }
    
    /*
    总结:
        1.lambda表达式只能有一行代码的情况下才能简化成为一行,如果有多行,那么就用代码块包裹。
        2.前提是接口为函数式接口(接口里面只有一个方法)
        3.多个参数也可以去掉参数类型,要去掉就都去掉,必须加上括号
     */
    
    

    笔记来源 : https://www.bilibili.com/video/BV1V4411p7EF

  • 相关阅读:
    BigDecimal
    android sdk manager 无法更新,解决连不上dl.google.com的问题
    程序卡在 while(SPI_I2S_GetFlagStatus(W5500_SPI, SPI_I2S_FLAG_TXE) == RESET) 处
    获取本设备IP地址
    Xamarin Android 监听音量键(下)
    xamarin Android 监听音量键(上)
    最大子序列和
    2.找出单独出现的数字
    编程题常见输入格式处理方法
    二进制比较:破解 LuaJIT 加密脚本的一种新思路。直接修改,无需反编译
  • 原文地址:https://www.cnblogs.com/snailzh/p/13432320.html
Copyright © 2011-2022 走看看