lambda表达式的进阶过程(一)

简介: lambda表达式的进阶过程

什么是Lambda表达式


简述


Lambda表达式是JAVA8中提供的一种新的特性,是一个匿名函数方法。可以把Lambda表达式理解为一段可以传递的代码,可以写出更简洁、更灵活的代码。


Lambda表达式的优点


简洁:无需像匿名内部类那样写大量模板代码,直接把方法体的实现写进去即可。

灵活:Lambda可以作为参数和返回值进行传递,赋值给函数式接口。

可推导:可以根据上下文推导出参数和返回值的类型,不需要显式声明。

惰性:只有调用了该lambda表达式,才会真正执行方法体中的代码。


语法格式


(parameters) -> expression

(parameters) ->{ statements; }


第一个为无返回值的语法,第二个为有返回值的语法。

使用lambda表达式可以写出非常简洁的函数式代码,经常用于集合迭代,事件处理等场景。


函数式接口


定义


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


interface ILove{
    void love(int a,String b);
}


对于函数式接口,我们可以通过lambda表达式来创建该接口的对象


常见的函数式接口


几个常见的函数式接口:


Runnable:抽象方法run()

Supplier:抽象方法get()

Consumer:抽象方法accept()

Function:抽象方法apply()

Predicate:抽象方法test()


汇总


函数式接口就是仅包含一个抽象方法的接口。

使用 @FunctionalInterface 注解进行修饰,明确其角色。

函数式接口的抽象方法形式称为函数描述符。

可以包含默认方法和静态方法。

描述符参数列表和返回值相同不构成重复。

可以继承自其他接口。

函数式接口的实现可以通过 Lambda 表达式简洁地表示。

常用的函数式接口:Consumer、Supplier、Function、Predicate 等。

可以用方法引用直接引用现有方法实现函数式接口。

在许多场景下可用函数式接口替代匿名内部类。

作为方法的参数和返回值传递 Lambda 实现。

扩展了 Java 对函数式编程的支持。

但不应滥用函数式接口,应与面向对象编程结合使用。

Java 中函数式接口的定义让 Lambda 表达式有了使用场景。

使语言表达更灵活,代码更简洁。

总结起来,函数式接口和 Lambda 表达式相辅相成,增强了 Java 的函数式编程能力,使代码更加简洁高效。但还需与面向对象编程结合使用,发挥各自优势。


Lambda的演化过程


描述:有一个接口,我们需要实现其方法。

方式一:普通方法,直接普通类实现,并重写方法


public class Testlambda {
    public static void main(String[] args) {
        ILove love=new Love();
        love.love(2);
    }
}
class Love implements ILove{
    @Override
    public void love(int a) {
        System.out.println("I Love You"+a);
    }
}
interface ILove{
    void love(int a);
}


方式二:静态内部类


public class Testlambda {
   static class Love implements ILove{
        @Override
        public void love(int a) {
            System.out.println("I Love You"+a);
        }
    }
    public static void main(String[] args) {
        ILove love=new Love();
        love.love(2);
    }
}
interface ILove{
    void love(int a);
}



方式三:局部内部类


public class Testlambda {
    public static void main(String[] args) {
        //局部内部类
        class Love implements ILove{
            @Override
            public void love(int a) {
                System.out.println("I Love You"+a);
            }
        }
        ILove love=new Love();
        love.love(2);
    }
}
interface ILove{
    void love(int a);
}



方式四:匿名内部类


public class Testlambda {
    public static void main(String[] args) {
        //匿名内部类
        ILove love=new ILove(){
            @Override
            public void love(int a) {
                System.out.println("I Love You"+a);
            }
        };
        love.love(2);
    }
}
interface ILove{
    void love(int a);
}


方式五:lambda表达式


public class Testlambda {
    public static void main(String[] args) {
        //lambda表达式
        ILove love=(int a)-> {
                System.out.println("I Love You"+a);
            };
        love.love(2);
    }
}
interface ILove{
    void love(int a);
}

通过以上5中方式的对比,可以看到从繁琐到简单的一个过程,每一种都在上一种的基础上进行演化。演化到一种相对简单的形式,供用户使用。


相关文章
|
15小时前
|
算法 编译器 C++
【C++入门到精通】新的类功能 | 可变参数模板 C++11 [ C++入门 ]
【C++入门到精通】新的类功能 | 可变参数模板 C++11 [ C++入门 ]
23 1
|
15小时前
|
算法 编译器 程序员
【C++入门到精通】 Lambda表达式 C++11 [ C++入门 ]
【C++入门到精通】 Lambda表达式 C++11 [ C++入门 ]
12 1
|
15小时前
|
Serverless 数据处理 Python
Python函数式编程:理解与实践
Python函数式编程是一种高阶编程范式,它强调函数的纯洁性和不可变性,使得代码更易于理解、维护和扩展。本文将深入探讨Python函数式编程的概念和应用,介绍函数式编程的基本特性、常用函数和实际应用场景,并通过具体案例演示如何使用Python实现函数式编程。
85 6
|
5月前
|
算法 编译器 C++
C++11 Lambda表达式的用法与原理
C++11 Lambda表达式的用法与原理
58 0
|
10月前
|
Java
lambda表达式的进阶过程(二)
lambda表达式的进阶过程
46 0
lambda表达式的进阶过程(二)
|
Java 编译器
「 Java基础-Lambda 」试试Lambda表达式?通俗易懂得嘞!
本文从Lambda表达式的基础概念、函数式接口、以及Lambda表达式的常用示例几方面完整的讨论了这一Java8新增的特性,实际开发中确实为我们提供了许多便利,简化了代码。欢迎小伙伴继续提出不同的见解一起讨论!
「 Java基础-Lambda 」试试Lambda表达式?通俗易懂得嘞!
|
JavaScript 前端开发 Java
软件测试|Lambda表达式介绍和底层实现
软件测试|Lambda表达式介绍和底层实现
118 0
软件测试|Lambda表达式介绍和底层实现
|
编译器 C# C语言
C#技巧:常用的lambda表达式整理
"Lambda表达式"属于一个匿名函数,是一种针对C\#编程语言高效的类似于函数式编程的表达式。采用Lambda简化了匿名委托的使用,可以大大减少开发中需要编写的代码量。比如针对一些求和、去重、排序等等可以省去了循环遍历的写法,使得代码变得更加简洁。
C#技巧:常用的lambda表达式整理
|
Python 容器
吃透Python函数进阶嵌套等知识点
吃透Python函数进阶嵌套等知识点
|
监控 安全 Java
【精通函数式编程】(十一) CompletableFuture、反应式编程源码解析与实战
Future异步编程和CompletableFuture 接口都可以实现异步编程,我们通过源码深入理解其原理和设计的思想,Java9中提供了反应式编程(Flow API)我们分析其源码并提供一个响应式查询实战。