zoukankan      html  css  js  c++  java
  • java Lambda

    Lambda的主要作用是替代匿名内部类,更为简洁。

    Lambda表达式的目标类型必须是函数式接口,函数式接口就是只包含一个抽象方法的接口(该接口可以包含多个默认方法、类方法)。

    Lambda表达式只能为函数式接口创建对象,Lambda表达式只能实现一个方法,故其所实现的接口只能有一个抽象方法。

    匿名内部类的实现方式如下:

    public class Test {
    
        public static void main(String args[])  {
    
            // 匿名内部类实现Computation接口
            Computation adder = new Computation(){
    
                // 实现add()方法
                public int add(int a, int b) {
                    return a+b;
                }
            };
    
            System.out.println(adder.add(5, 6));
    
        }
    }
    
    interface Computation {
    
        public abstract int add(int a, int b);
    }

    Lambda表达式的实现方法如下:

    public class Test {
    
        public static void main(String args[])  {// Lambda表达式实现Computation接口
            Computation adder = (a,b) -> a+b;
    
            System.out.println(adder.add(5, 6));
    
        }
    }
    
    interface Computation {
    
        public abstract int add(int a, int b);
    }

    Lambda表达式由三部分组成,以Computation adder = (a,b) -> a+b; 为例

    形参列表。如上述中的(a,b),允许省略形参类型。

    箭头 ->。

    代码块,如上a+b。   若代码块只有一句可以省略花括号{}, 只有一条return语句,也可以省略return。

                                      Computation adder = (a,b) -> a+b;等价于Computation adder = (int a, int b) -> {return (a+b);};

    Lambda表达式与匿名内部类的主要区别如下:

    匿名内部类可以为任意接口创建实例,不管改接口包含多少抽象方法,而Lambda表达式只能为函数式接口(只包含一个抽象方法)创建实例。

    匿名内部类可以抽象类普通类创建实例。

    匿名内部类实现抽象方法的方法体允许调用接口中的默认方法;Lambda表达式的代码块不允许。

  • 相关阅读:
    使用Distinct()内置方法对List集合的去重 问题
    TCP连接与HTTP请求
    ASP.NET MVC 使用 Authorize 属性过滤器验证用户是否已登录
    C#进阶系列——WebApi 跨域问题解决方案:CORS
    关于设计模式的六大原则
    C# WebApi 接口传参详解
    数据库数据流量太大-问题诊断
    docker的build生成镜像和启动container
    docker生成dotnet core镜像
    NET Core 源码浏览站点工具
  • 原文地址:https://www.cnblogs.com/deltadeblog/p/8401349.html
Copyright © 2011-2022 走看看