广告
返回顶部
首页 > 资讯 > 后端开发 > Python >java Lambda表达式的使用心得
  • 483
分享到

java Lambda表达式的使用心得

javaLambdaLambda表达式java表达式 2022-11-12 15:11:40 483人浏览 独家记忆

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

摘要

目录Lambda表达式的心得Lambda表达式法传统方法使用Lambda表达式 你首先要知道的Lambda表达式的技巧Lambda表达式只能用来简化仅包含一个public方法的接口的

Lambda表达式的心得

如题,因为博主也是最近才接触到Lambda表达式的(PS 在这里汗颜一会)。我并不会讲解它的原理,诚然任何一件事物如果理解原理的话,使用它必将更加容易。但博主在学习的时候,大多数时候都是学会怎么用,然后在细究原理。就像你骑自行车之前,难道首先还要研究自行车的原理么?

首先Lambda表达式的最简单应用如下

Lambda表达式法


        String lam= "初次相识Lambda";
        new Thread(() -> System.out.println(lam)).start();

传统方法


  String tradition="传统方法";
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println(tradition);
            }
        }).start();

输出结果

很简洁有没有?省略了好多代码是不是,在这里 你可以发现”,Lambda表达式和在Thread创建一个匿名类的作用是一样。我们可以这样认为Lambda表达式本身代表了一个匿名类。

这就是Lambda最大的作用,当然Lambda表达式只能创建接口interface对象。 创建类是不行的,抽象类也是不行的 ,只要是类都是不行的。

首先,我定义了一个自定义的接口,可以用来测试


@FunctionalInterface
public interface Lam {
    //Lambda表达式调用的方法
    void bda();
    
    //接口的默认方法
    default void test(){
        System.out.println("我是默认的方法");
    };
    //接口的静态方法
    static void test1(){
        System.out.println("我是静态方法");
    }
}

使用Lambda表达式 你首先要知道的

1.Lambda表达式只能是接口 interface的创建(PS从上面的例子可以看出来,Runnable是接口,可以查看源代码),并且这个接口只能包含一个方法(除了default方法和static方法)。在接口中创建default方法和static方法都必须要实现方法体如下图

2.如果你用Lambda表达式来创建类 class,则会出现以下错误 ”Target type of a lambda conversion must be an interface“如果你怕自己的定义的接口不符合Lambda表达式的规范 ,你可以在接口interfaca 上面添加注解@FunctionalInterface

3.Lambda表达式的规范表示格式 (parameters) ->{ statements; }。在某些时刻,你还可以简化这个格式


  //接口定义的方法无参数时候,并且你想要执行操作也只有一句代码的时候,Lambda会自动返回一句代码,并且可以不用加{}
        Lam lam1=()->System.out.println("无参数");

你可以发现后面的大括号{ }没了,这是因为后面代码如果只有一句的话,是可以省略{ } 的

我们把Lam接口定义的调用方法参数修改一下,多出了一个String类型的形参s


 //Lambda表达式调用的方法
    void bda(String s);

这时候 我们如果使用Lambda表达式,则可以这样


//接口定义的方法有参数时候,并且你想要执行的操作也只有一句代码的时候
        Lam lam1=e->System.out.println(e);//这一句还有简化版本  Lam lam1=System.out::println;
        lam1.bda("4556");

你又会发现,前面的()中括号也没了,这是因为当参数只有一个的时候,是可以省略()的。

当然也有你要执行很多代码的时候,那这时候可以这样


 //接口定义的方法有参数时候,并且你想要执行的操作有很多句代码的时候
        Lam lam1 = (String e) -> {
            String a = e + "add";
            System.out.println(a);
        };
        lam1.bda("test+");

输出结果如下

当然你还会问Lambda表达式能不能返回东西呢?这是肯定能的,首先我们再把上面的Lam接口方法修改一下


 //Lambda表达式调用的方法
    String bda(String s);

让bda方法返回一个String值,这次如果我们用Lambda的话


//接口定义的方法有返回值的时候
        Lam lam1=s ->{System.out.println(s);return "我是返回的数据";};
        lam1.bda("test1");
        System.out.println(lam1.bda("test2"));

运行的结果:

总结 Lambda表达式 就是用来创建一个匿名的接口对象,即 它本身就是一个接口的匿名实例。只不过这个接口 有一些条件限制。

Lambda表达式的技巧

Lambda表达式只能用来简化仅包含一个public方法的接口的创建

规则

  • 1.只能是接口
    • 否则报:Target type of a lambda conversion must be an interface
  • 2.只能有一个public方法
    • 否则报:Multiple non-overriding abstract methods found ainterface
    • 或AInterface is not a functional interface

括号形式

testA((int i, int j) -> {});参数要与接口一致


public class Go {
    public static void main(String a[]) {
        //正确示范
        testA((int i, int j) -> {});
        //错误示范:Multiple non-overriding abstract methods found xxx;只能有一个public方法
        testB((int i, int j) -> {});
        //错误示范:Target type of a lambda conversion must be an interface;只能是接口
        testC((int i, int j) -> {});
    }
    public static void testA(AInterface t) {    }
    public static void testC(CInterface t) {}
    public static void testB(BInterface t) {}
    interface AInterface {
        void xxx(int i, int j);
    }
    interface BInterface {
        void xxx(int i, int j);
        void YYY(int i, int j);
    }
    abstract class CInterface {
        abstract void xxx(int i, int j);
    }
}

双冒号表达形式

  • 双冒号后面必须是静态方法
    • 否则报错:Non-static method cannot be referenced from a static context
  • 双冒号后面的方法与接口方法参数一样
  • 方法与接口的权限可以不一样
  • 返回类型:如果接口里面方法是void,双冒号后的方法可以任意返回类型,否则要一致

public class Go {
    public static void main(String a[]) {
        //之前的写法
        testA(new AInterface() {
            @Override
            public void xxx(int i, int j) {
                
            }
        });
        //正确,相对与接口里面xxx方这是改成静态和换了个名字
        testA(Go::mydog);
        //正确,加了返回类型和public换成private,也是ok
        testA(Go::mydog2);
        
        //错误:Non-static method cannot be referenced from a static context
        testA(Go::mydog3);
        //这样写也是ok的。
        AInterface aInterface = Go::mydog;
        testA(aInterface);
    }
    public static void testA(AInterface t) {
        t.xxx(1, 2);
    }
    interface AInterface {
        void xxx(int i, int j);
    }
    public static boolean mydog(int i, int j) {
        System.out.println("mydog" + i + " & " + j);
        return false;
    }
    private static void mydog2(int i, int j) {
        System.out.println("mydo2" + i + " & " + j);
    }
    public void mydog3(int i, int j) {
        System.out.println("mydog3" + i + " & " + j);
    }
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: java Lambda表达式的使用心得

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

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

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

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

下载Word文档
猜你喜欢
  • java Lambda表达式的使用心得
    目录Lambda表达式的心得Lambda表达式法传统方法使用Lambda表达式 你首先要知道的Lambda表达式的技巧Lambda表达式只能用来简化仅包含一个public方法的接口的...
    99+
    2022-11-12
    java Lambda Lambda表达式 java表达式
  • java8新特性-lambda表达式入门学习心得
    目录定义lambda表达式的语法需求函数式接口方法引用构造器引用总结定义 jdk8发布新特性中,lambda是一大亮点之一。lambda表达式能够简化我们对数据的操作,减少代码量,大...
    99+
    2023-03-13
    java8新特性 lambda表达式入门 java8 lambda表达式
  • 【javaSE】 Lambda表达式与Lambda表达式的使用
    文章目录 🌳Lambda表达式的背景🚩Lambda表达式的语法🚩函数式接口 🎋Lambda表达式的基本使用🎄...
    99+
    2023-09-15
    开发语言 java Lambda表达式 源码
  • Java的Lambda表达式如何使用
    这篇文章主要介绍“Java的Lambda表达式如何使用”,在日常操作中,相信很多人在Java的Lambda表达式如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java的Lambda表达式如何使用”的疑...
    99+
    2023-06-30
  • Java Lambda表达式怎么使用
    这篇文章主要介绍“Java Lambda表达式怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java Lambda表达式怎么使用”文章能帮助大家解决问题。一、背景Lamb...
    99+
    2023-06-29
  • java lambda表达式怎么使用
    Java lambda表达式是Java 8引入的一种新特性,它可以简化代码的编写,尤其是在处理函数式接口时非常方便。下面是使用lam...
    99+
    2023-09-23
    java
  • Java中Lambda表达式的使用详解
    目录理解函数式接口以及 Lambda表达式的发展过程Lambda表达式及语法一起来看看具体的使用你需要注意什么Lambda的实际运用1.对集合排序2.遍历集合3.遍历集合(带条件)4...
    99+
    2022-11-12
    Java Lambda Lambda表达式
  • 进阶JAVA篇- Lambda 表达式与 Lambda 表达式的省略规则
    目录         1.0 什么是 Lambda 表达式?         1.1 既然跟匿名内部类相关,先来回顾匿名内部类。          1.2 Lambda 表达式与匿名内部类之间的关系。         1.3 函数式接口  ...
    99+
    2023-10-20
    java python 开发语言
  • Java的Lambda表达式使用实例分析
    这篇文章主要讲解了“Java的Lambda表达式使用实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java的Lambda表达式使用实例分析”吧!Lambada 简介lambda 表达...
    99+
    2023-07-05
  • Java中Lambda表达式基础及使用
    目录一、举例说明1、无参无返回1.1 定义一个接口1.2接口实现类1.3 测试类2、有参无返回代码示例3、有参有返回二、简单事项1、省略模式2、注意事项三、Lambda表达式和匿名内部类的区别1、所需类型不同:2、使用限制不同:3、实现原理...
    99+
    2019-12-07
    Java Lambda表达式 Java Lambda
  • lambda表达式如何在java中使用
    这篇文章给大家介绍lambda表达式如何在java中使用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Lamda表达式λ 希腊字母表中排序第十一位字母,英语名称为Lambda避免匿名内部类定义过多其实质属于函数式 编程...
    99+
    2023-06-14
  • Java中Lambda表达式使用及详解
    Java中Lambda表达式使用及详解 前言 一、Lambda表达式的简介 Lambda表达式(闭包):java8的新特性,lambda运行将函数作为一个方法的参数,也就是函数作为参数传递到方法中。使用lambda表达式可以让代码更加...
    99+
    2023-08-16
    java
  • Java Lambda表达式怎么应用
    Java 中的 Lambda 表达式是 JDK 8 中引入的一种函数式编程的特性,它可以使代码更简洁、更易读、更易维护。Lambda...
    99+
    2023-10-10
    java
  • Java中Lambda表达式怎么用
    这篇文章主要介绍了Java中Lambda表达式怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、前言Lambda表达式是java 8中包含的重要功能之一。Lambda表...
    99+
    2023-06-15
  • 关于Java 中的 Lambda 表达式
    这篇文章我们将讨论关于Java 中的 Lambda 表达式,Lambda 表达式是 Java 涉足函数式编程的过程。它接受参数并将其应用于表达式或代码块。以下是语法的基本示例: ...
    99+
    2022-11-12
    Java Lambda 表达式 Lambda 表达式
  • Java 8的Lambda表达式详解
    本篇内容介绍了“Java 8的Lambda表达式详解”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!功能接口只包含一个方法的接口被称为功能接口...
    99+
    2023-06-17
  • QueryWrapper的lambda表达式使用OR
    com.baomidou.mybatisplus.core.conditions.query.QueryWrapper是MybatisPlus框架构造查询条件常用的对象 使用lambda表达式写法更为清晰,简洁: QueryWrap...
    99+
    2023-08-31
    java mybatis Powered by 金山文档
  • Java中Lambda表达式的使用详细教程
    目录简介格式实例函数式接口lambda作为参数遍历集合创建线程排序简介 说明 本文用示例展示Lambda表达式的用法。同时也会介绍Lambda的相关知识。 Lambda表达式介绍 L...
    99+
    2022-11-13
    Java Lambda表达式使用 Java Lambda表达式 Java Lambda
  • Java学习之Lambda表达式的使用详解
    目录Lamda表达式函数式接口Lambda表达式的推导函数式接口的不同类型Lambda表达式与函数式接口的简单应用Lambda表达式的优缺点Lamda表达式 λ希腊字母...
    99+
    2022-12-26
    Java Lambda表达式用法 Java Lambda表达式 Java Lambda
  • lambda表达式使用方法
    本篇内容介绍了“lambda表达式使用方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!package test;import java.u...
    99+
    2023-06-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作