广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java学习之Lambda表达式的使用详解
  • 958
分享到

Java学习之Lambda表达式的使用详解

JavaLambda表达式用法JavaLambda表达式JavaLambda 2022-12-26 09:12:25 958人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录Lamda表达式函数式接口Lambda表达式的推导函数式接口的不同类型Lambda表达式与函数式接口的简单应用Lambda表达式的优缺点Lamda表达式 λ希腊字母

Lamda表达式

λ希腊字母表中排序第11位的字母,英文名称为Lambda,它Lambda表达式是Java SE 8中一个重要的新特性,允许通过表达式来代替功能接口,它与其他方法相同,提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块),实际上是属于函数式编程的概念:

语法如下:

(参数) ->表达式 或 (参数) ->{ 语句; }

Lambda表达式允许你直接把一个代码块赋值给一个变量

无参有返回值Lambda表达式:

() -> 2    //该Lambda表达式表示返回值为2

有参有返回值Lambda表达式:

一个参数:

x -> 2 * x    //x为参数,返回2*x的值

2个参数:

(x, y) -> x + y    //x,y均为参数,返回两者的和

有参无返回值Lambda表达式:

(String s) -> System.out.print(s)    //s为参数,将其输出

为什么要使用lambda表达式?

  • 避免匿名内部类定义过多
  • 可以让代码看起来很简洁
  • 去掉了大量没有意义的代码,只留下核心的逻辑

在讲如何使用Lamda表达式之前,我们先来学习一下FunctionalInterface (函数式接口)

函数式接口

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

举例:

//定义函数式接口
interface mylike{
    void lambda();
}

jdk1.8新特性,default默认方法可以有具体的实现:

//定义函数式接口
interface mylike{
        void lambda();
        default void test2() {
            System.out.println("我是default默认方法可以有具体的实现");
        }
    }

Lambda表达式的推导

定义函数式接口:

package Lambda;

public interface fun_interface {
    void show();
}

匿名函数的语法:

new 接口/类名(参数1, 参数2...){
        实现方法1(){

        }
        实现方法2(){

        }
        ......
 };

匿名函数的方法是:返回值 方法名 参数列表 方法体,我们只需要关心参数列表 方法体,而不用关心方法名和返回值

使用匿名内部类实现该函数式接口:

package Lambda;

public class fun_test1 {
    public static void main(String[] args) {
        fun_interface fun_interface=new fun_interface()
        {
                @Override
                public void show() {
                    System.out.println("重写函数式接口中的方法");
                }
            };
        fun_interface.show();
    }
}

在上述代码中,我们没有创建实现类[fun_test1]的实例化对象就实现了具体的show()方法,通常,我们也习惯用匿名内部类的方式创建并启动线程

但是上面的代码还是略显麻烦

Lambda表达式的写法:

package Lambda;
public class lambda_test {
    public static void main(String[] args) {
        fun_interface fun_interface=()->System.out.println("重写函数式接口中的方法");
        fun_interface.show();
    }
}

无论是匿名内部类还是Lambda表达式都可以正确实现这个接口,但使用匿名内部类,我们会发现在代码量上减少了许多,但其实Lambda表达式的本质就是一个匿名内部类

使用Lambda表达式的前提是:接口为函数式接口

函数式接口的不同类型

package Lambda;

public class fun_test3 {
    //无返回值无参数
    interface NoParameterNoReturn {
        void test();
    }
    //无返回值一个参数
    interface OneParameterNoReturn {
        void test(int a);
    }
    //无返回值多个参数
    interface MoreParameterNoReturn {
        void test(int a,int b);
    }
    //有返回值无参数
    interface NoParameterReturn {
        int test();
    }
    //有返回值一个参数
    interface OneParameterReturn {
        int test(int a);
    }
    //有返回值多参数
    interface MoreParameterReturn {
        int test(int a,int b);
    }

​​​​​​​}

Lambda表达式与函数式接口的简单应用

package Lambda;

public class fun_lambda {
    public static void main(String[] args) {
        //无返回值无参数
        NoParameterNoReturn parameterNoReturn=()-> System.out.println("这里是重写后的方法");
        parameterNoReturn.test();

        //无返回值一个参数
        //写法1
        OneParameterNoReturn oneParameterNoReturn=(a)->{System.out.println(a);};
        oneParameterNoReturn.test(99);
        //写法2
        OneParameterNoReturn oneParameterNoReturn1=a->System.out.println(a);
        //只有一个参数,小括号可以省略;只有一条语句,花括号可以省略
        oneParameterNoReturn1.test(99);

        //无返回值多个参数
        MoreParameterNoReturn moreParameterNoReturn=(a,b)->{System.out.println(a+b);};
        moreParameterNoReturn.test(99,1);


        //有返回值无参数
        NoParameterReturn noParameterReturn=()->{return  520;};
        int ret=noParameterReturn.test();
        System.out.println(ret);

        //有返回值一个参数
        OneParameterReturn oneParameterReturn=(a)->{return a+1;};
        int ret1=oneParameterReturn.test(99);
        System.out.println(ret1);

        //有返回值多参数
        MoreParameterReturn moreParameterReturn=(a,b)->a*b;//相当于(a+b)->{return a*b;}
        int ret2=moreParameterReturn.test(4,8);
        System.out.println(ret2);
    }
}
interface NoParameterNoReturn {
    void test();
}
//无返回值一个参数
interface OneParameterNoReturn {
    void test(int a);
}
//无返回值多个参数
interface MoreParameterNoReturn {
    void test(int a,int b);
}
//有返回值无参数
interface NoParameterReturn {
    int test();
}
//有返回值一个参数
interface OneParameterReturn {
    int test(int a);
}
//有返回值多参数
interface MoreParameterReturn {
    int test(int a,int b);
}

输出:

这里是重写后的方法
99
99
100
520
100
32

注:

参数类型可以省略,如果需要省略,每个参数的类型都要省略。

参数的小括号里面只有一个参数,那么小括号可以省略

如果方法体当中只有一句代码,那么大括号可以省略

如果方法体中只有一条语句,其是return语句,那么大括号可以省略,且去掉return关键字

Lambda表达式的优缺点

优点:

  • 在代码层次上来说,使代码变得非常的简洁,开发迅速
  • 方便函数式编程
  • 非常容易进行并行计算
  • Java 引入 Lambda,改善了集合操作

缺点:

  • 代码可读性变差
  • 在非并行计算中,很多计算未必有传统的 for 性能要高
  • 不容易进行调

以上就是Java学习之Lambda表达式的使用详解的详细内容,更多关于Java Lambda表达式的资料请关注编程网其它相关文章!

--结束END--

本文标题: Java学习之Lambda表达式的使用详解

本文链接: https://www.lsjlt.com/news/175782.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java学习之Lambda表达式的使用详解
    目录Lamda表达式函数式接口Lambda表达式的推导函数式接口的不同类型Lambda表达式与函数式接口的简单应用Lambda表达式的优缺点Lamda表达式 λ希腊字母...
    99+
    2022-12-26
    Java Lambda表达式用法 Java Lambda表达式 Java Lambda
  • C++学习之Lambda表达式的用法详解
    目录简介捕获原理Lambda回调简介 Lambda 表达式(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中...
    99+
    2022-11-13
  • ​​C++11系列学习之Lambda表达式
    目录一、为什么要有lambda表达式?二、使用语法捕获列表mutable影响lambda表达式std::bind和lambda表达式结合三、std::function 和lambda...
    99+
    2022-11-13
  • java lambda表达式详解
    一、Lambda初识 我们知道,在Java中,接口是不能实例化的,但是接口对象可以指向它的实现类对象。如果接口连实现对象都没有呢?那还可以使用匿名类的方式,如下: public class JavaTest { public ...
    99+
    2023-09-15
    java servlet jvm
  • Java中Lambda表达式的使用详解
    目录理解函数式接口以及 Lambda表达式的发展过程Lambda表达式及语法一起来看看具体的使用你需要注意什么Lambda的实际运用1.对集合排序2.遍历集合3.遍历集合(带条件)4...
    99+
    2022-11-12
  • Java中Lambda表达式的进化之路详解
    目录Lambda表达式的进化之路为什么要使用Lambda表达式Lambda表达式的注意点下面是Lambda表达式的实现过程1.最开始使用的是定义外部实现类来完成接口2.开始使用静态内...
    99+
    2022-11-12
  • Java中Lambda表达式使用及详解
    Java中Lambda表达式使用及详解 前言 一、Lambda表达式的简介 Lambda表达式(闭包):java8的新特性,lambda运行将函数作为一个方法的参数,也就是函数作为参数传递到方法中。使用lambda表达式可以让代码更加...
    99+
    2023-08-16
    java
  • Java 8的Lambda表达式详解
    本篇内容介绍了“Java 8的Lambda表达式详解”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!功能接口只包含一个方法的接口被称为功能接口...
    99+
    2023-06-17
  • 30分钟入门Java8之lambda表达式学习
    前言Google在今年发布Android N开发者预览版,一并宣布开始支持Java 8。我们终于能在Android开发中使用到Java8的一些语言特性了。目前支持: 默认方法 lambda表达式 多次注解今天我们就简要学习lambda...
    99+
    2023-05-31
    java8 lambda ava
  • Python语法学习之正则表达式的使用详解
    目录正则表达式中的特殊字符正则表达式的使用正则小案例 - 1正则小案例 - 2正则小案例 - 3要想成功的进行字符串的匹配需要使用到正则表达式模块,正则表达式匹配规则以及需要被匹配的...
    99+
    2022-11-10
  • Java中Lambda表达式使用详细解读
    目录前言一、Lambda表达式的简介二、Lambda表达式对接口的要求1.函数式接口2.@FunctionalInterface3.Lambda表达式的语法1.Lambda表达式的基...
    99+
    2023-05-18
    java  Lambda表达式使用 java  Lambda表达式 Lambda表达式使用
  • 详细解读Java的Lambda表达式
    目录Lambda 表达式Lambada 简介简单的示例Lambda 表达式的组成部分函数式接口介绍几个 Java 中重要的函数接口Lambda 表达式 最早接触到 Lambda 表达...
    99+
    2023-05-14
    Java Lambda表达式 Lambda表达式
  • 【javaSE】 Lambda表达式与Lambda表达式的使用
    文章目录 🌳Lambda表达式的背景🚩Lambda表达式的语法🚩函数式接口 🎋Lambda表达式的基本使用🎄...
    99+
    2023-09-15
    开发语言 java Lambda表达式 源码
  • C++实例详解lambda表达式的使用
    目录lambda表达式1、lambda表达式语法2、lambda应用3、lambda表达式的应用实践1、计算器案例2、智能指针案例3、优先级队列lambda表达式 C++11 函数对...
    99+
    2022-11-13
  • 教你在一分钟之内理解Java Lambda表达式并学会使用
    目录一、前言二、Lambda 表达式语法三、运行 Lambda 表达式示例的环境要求。四、示例1:将 Runnable 与 Lambda 表达式结合使用五、示例2:使用Lambda表...
    99+
    2022-11-12
  • Java中Lambda表达式的使用详细教程
    目录简介格式实例函数式接口lambda作为参数遍历集合创建线程排序简介 说明 本文用示例展示Lambda表达式的用法。同时也会介绍Lambda的相关知识。 Lambda表达式介绍 L...
    99+
    2022-11-13
  • Java使用lambda表达式简化代码的示例详解
    目录目的推理一下实现接口,使用方法内部类实现接口,使用方法局部内部类实现接口,使用方法匿名内部类实现接口,使用方法使用lamda表达式的,实现方法可带参数只有一个参数有返回值只有一条...
    99+
    2022-11-13
    Java lambda表达式简化代码 Java lambda表达式 Java 简化代码
  • 详解Java函数式编程和lambda表达式
    目录为什么要使用函数式编程JDK8接口新特性函数接口方法引用类型推断变量引用级联表达式和柯里化为什么要使用函数式编程 函数式编程更多时候是一种编程的思维方式,是种方法论。函数式与命令...
    99+
    2022-11-12
  • python中的lambda表达式用法详解
    本文实例讲述了python中的lambda表达式用法。分享给大家供大家参考,具体如下: 这里来为大家介绍一下lambda函数。 lambda 函数是一种快速定义单行的最小函数,是从 Lisp 借用来的,可以...
    99+
    2022-06-04
    表达式 详解 python
  • Java中的反射,枚举及lambda表达式的使用详解
    目录一、反射1.1定义1.2用途1.3反射基本信息1.4与反射相关的类1.5Class类(反射机制的起源)1.6Class类中的相关方法1.7获得Class对象的三种方式1.8反射的...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作