Java8学习笔记(一)–Lambda表达式

Java8学习笔记(一)–Lambda表达式两个概念函数式接口函数式接口就是只显式声明一个抽象方法的接口。为保证方法数量不多不少,java8提供了一个专用注解,这样,当接口中声明的抽象方法多于或少于一个时就会报错。如下图所示:L

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

两个概念

函数式接口

函数式接口就是只显式声明一个抽象方法的接口。为保证方法数量不多不少,java8提供了一个专用注解@FunctionalInterface,这样,当接口中声明的抽象方法多于或少于一个时就会报错。如下图所示:
Java8学习笔记(一)--Lambda表达式
Java8学习笔记(一)--Lambda表达式

Lambda表达式

Lambda表达式本质上是一个匿名方法。让我们来看下面这个例子:

public int add(int x, int y) {
    return x + y;
}

转成Lambda表达式后是这个样子:

(int x, int y) -> x + y;

参数类型也可以省略,Java编译器会根据上下文推断出来:

(x, y) -> x + y; //返回两数之和

或者

(x, y) -> { return x + y; } //显式指明返回值

可见Lambda表达式有三部分组成:参数列表,箭头(->),以及一个表达式或语句块。

Lambda表达式和函数式接口结合

步骤:

  1. 新建无参函数式接口(先演示无参);
  2. 新建包含属性为函数式接口的类;
  3. 实现函数式接口;
  4. 测试函数式接口的方法;

新建无参函数式接口

@FunctionalInterface
public interface InterfaceWithNoParam {
    void run();
}

新建包含属性为函数式接口的类

public class TestJava8{
InterfaceWithNoParam param;
}

实现函数式接口

public class TestJava8{
	//匿名内部类
	InterfaceWithNoParam param1 = new InterfaceWithNoParam() {
        @Override
        public void run() {
            System.out.println("通过匿名内部类实现run()");
        }
    };
	//Lambda表达式
            //空括号表示无参
	InterfaceWithNoParam param = () -> System.out.println("通过Lambda表达式实现run()") ;
}

测试函数式接口的方法

@Test
public void testIntfaceWithNoparam() {

    this.param.run();
    this.param1.run();
}

运行结果

Java8学习笔记(一)--Lambda表达式

其他形式的函数式接口及实现

上述内容实现了无参无返回值的函数接口与实现,当然还有其他形式:

  1. 有参无返回值
  2. 无参有返回值
  3. 有参有返回值

有参无返回值

接口

@FunctionalInterface
public interface InterfaceWithParams {
    void run(String s);
}

实现

InterfaceWithParams params = new InterfaceWithParams() {
    @Override
    public void run(String s) {
        System.out.println("通过" + s + "实现run(String)");
    }
};
InterfaceWithParams params1 = (String s) -> System.out.println("通过" + s + "实现run(String)");

测试

    this.params.run("匿名类");
    this.params1.run("Lambda");

运行

Java8学习笔记(一)--Lambda表达式

无参有返回值

接口

@FunctionalInterface
public interface InterfaceUnVoidWithNoParam {
    String run();
}

实现

InterfaceUnVoidWithNoParam interfaceUnVoidWithNoParam = new InterfaceUnVoidWithNoParam() {
    @Override
    public String run() {
        return "Hello World!";
    }
};
InterfaceUnVoidWithNoParam interfaceUnVoidWithNoParam1 = () -> "Hello Lambda!";

测试

    String s = this.interfaceUnVoidWithNoParam.run();
    System.out.println("返回结果是:"+s);
    String s0 = this.interfaceUnVoidWithNoParam1.run();
    System.out.println("返回结果是:"+s0);

运行

Java8学习笔记(一)--Lambda表达式

有参有返回值

接口

@FunctionalInterface
public interface InterfaceUnVoidWithParams {
    String run(Integer integer);
}

实现

InterfaceUnVoidWithParams interfaceWithParams = new InterfaceUnVoidWithParams() {
    @Override
    public String run(Integer integer) {
        return String.valueOf(integer);
    }
};
InterfaceUnVoidWithParams interfaceWithParams1 = (Integer integer) -> String.valueOf(integer);

测试

    String s1 = this.interfaceWithParams.run(1);
    System.out.println("您输入的是:"+s1);
    String s2 = this.interfaceWithParams1.run(2);
    System.out.println("您输入的是:"+s2);

运行

Java8学习笔记(一)--Lambda表达式

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/168120.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Linux resize2fs命令扩展文件系统出错[通俗易懂]

    Linux resize2fs命令扩展文件系统出错[通俗易懂]sudoresize2fs/dev/nvme0n1p1原因:Linux不同文件系统格式的文件需要使用不同命令查询文件系统格式df-T-h #列出文件系统格式扩展分区文件系统sudoxfs_growfs/dev/nvme0n1p1 #注意分区名要写对分区文件系统扩容完成…

    2022年10月21日
    3
  • Python抛出异常_python抛出异常的作用

    Python抛出异常_python抛出异常的作用在工作中都会遇到异常报错问题,那么在这抽空码一些内容以作记录。在python中不同的异常可以用不同的类型(python中统一了类与类型,类型即类)去标识,不同的类对象标识不同的异常,一个异常标识一种错误AttributeError#试图访问一个对象没有的树形,比如foo.x,但是foo没有属性xIOError#输入/输出异常;基本上是无法打开文件ImportError#无法引入模块或包;基本上是路径问题或名称错误Indentati.

    2022年10月17日
    3
  • 如何用matlab编写分段函数_matlab 如何写分段函数

    如何用matlab编写分段函数_matlab 如何写分段函数展开全部^这是我前面帮一个32313133353236313431303231363533e4b893e5b19e31333262383662人写的分段函数,并绘图,你可以参考一下X=[];Y=[];x=[];y=[];x=0.1:0.1:1;y=(346500*0.0613*(1+0.0613).^x)./((1+0.0613).^x-1);X=[Xx];Y=[Yy];x=1:1:2;y=(…

    2022年5月18日
    56
  • NLP词向量和句向量方法总结及实现

    NLP词向量和句向量方法总结及实现目录一、Word2Vec1、Word2Vec介绍2、Gensim实现Word2Vec3、基于Word2Vec的句向量4、基于加权Word2Vec的句向量5、基于Word2Vec的文本向量化实现二、GloVe1、GloVe介绍2、基于源码的GloVe词向量生成(Linux下实现)3、Gensim加载GloVe训练的词向量三、Doc2Vec1、Doc2V…

    2022年6月12日
    46
  • Android adb shell dumpsys activity broadcasts分析

    Android adb shell dumpsys activity broadcasts分析adbshelldumpsysactivity中的broadcasts信息通过adbshelldumpsysactivity打印中的第二项就是broadcasts信息;ACTIVITYMANAGERBROADCASTSTATE(dumpsysactivitybroadcasts)Historicalbroadcasts[foreground]:#0:Broad

    2022年6月29日
    66
  • java 旅游管理系统

    java 旅游管理系统旅游系统设计分为前后网站和后台管理系统,功能点包含旅游景点信息分类展示、景点详情(地理位置、特色景点概述等)、下单预订、记录分享等功能。需搭建ftp服务:https://blog.csdn.net/weixin_44989660/article/details/111280276一:前端子系统功能需求分析1.游客注册登录功能模块:游客预定景点等操作需要先将账号密码进行注册,根据注册的账号密码登录到前端子系统中对功能模块进行操作。2.预定景点功能模块:游客遇到自己喜欢的景点信息后,可以通过点击预定景点按

    2022年6月11日
    27

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号