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中方式的对比,可以看到从繁琐到简单的一个过程,每一种都在上一种的基础上进行演化。演化到一种相对简单的形式,供用户使用。


相关文章
|
3月前
|
数据格式
常用的Lambda表达式案例解析,工作中都会用到!
常用的Lambda表达式案例解析,工作中都会用到!
|
4月前
|
Python
全网最适合入门的面向对象编程教程:Python函数方法与接口-函数与方法的区别和lamda匿名函数
【9月更文挑战第15天】在 Python 中,函数与方法有所区别:函数是独立的代码块,可通过函数名直接调用,不依赖特定类或对象;方法则是与类或对象关联的函数,通常在类内部定义并通过对象调用。Lambda 函数是一种简洁的匿名函数定义方式,常用于简单的操作或作为其他函数的参数。根据需求,可选择使用函数、方法或 lambda 函数来实现代码逻辑。
|
5月前
|
Java Android开发 开发者
Kotlin 循环与函数详解:高效编程指南
高效编程实践 • 避免不必要的循环 - 尽量使用集合操作如 map、filter 来减少显式的循环。 • 使用尾递归优化 - 对于需要大量递归的情况,考虑使用尾递归以优化性能。 • 内联函数 - 对于传递 Lambda 表达式的函数,使用 inline 关键字可以减少运行时开销。 通过上述指南,您应该能够更好地理解 Kotlin 中的循环和函数,并能够编写更加高效和简洁的代码。Kotlin 的设计哲学鼓励开发者编写易于理解和维护的代码,而掌握循环和函数是实现这一目标的关键步骤。 如果您想了解更多关于 Kotlin 的循环和函数的信息,以下是一些官方文档和资源,它们可以提供额外的参考
61 1
|
7月前
|
算法 安全 编译器
【C++进阶】模板进阶与仿函数:C++编程中的泛型与函数式编程思想
【C++进阶】模板进阶与仿函数:C++编程中的泛型与函数式编程思想
66 1
|
8月前
|
并行计算 Java API
【专栏】Java 8的Lambda表达式增强了函数式编程,允许以匿名函数形式传递行为
【4月更文挑战第27天】Java 8的Lambda表达式增强了函数式编程,允许以匿名函数形式传递行为。其基本语法`(params) -> expression/statements`,类型由参数推断,可引用final或effectively final的外部变量。Lambda广泛应用于集合操作(如Stream API)、并行流处理和GUI事件处理,简化代码并提高效率。通过实例,展示了Lambda在集合筛选、并行计算和事件处理中的应用,从而提高开发质量和效率。
52 4
JDK1.8新特性Lambda表达式简化if-else里都有for循环的优化方式
JDK1.8新特性Lambda表达式简化if-else里都有for循环的优化方式
92 0
|
8月前
|
存储 缓存 自然语言处理
【面试题】深入理解闭包的形成过程及应用!
【面试题】深入理解闭包的形成过程及应用!
|
8月前
|
编译器 C++
【C++】lambda表达式语法详细解读(代码演示,要点解析)
【C++】lambda表达式语法详细解读(代码演示,要点解析)
|
Java
lambda表达式的进阶过程(二)
lambda表达式的进阶过程
70 0
lambda表达式的进阶过程(二)
|
设计模式 算法 Java
如何用函数式接口重构常见模式
如何用函数式接口重构常见模式
177 0

热门文章

最新文章