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

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


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)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • 婚礼进行曲计算机谱子,婚礼进行曲(简谱+歌词+吉他谱)

    ===============婚礼进行曲lrc歌词下载=================[ti:婚礼进行曲][ar:胡彦斌][al:男人歌][by:www.Ailrc.comFrom水晶心]婚礼进行曲胡彦斌胡彦斌by:水晶心[00:03.71]婚礼进行曲[00:09.07]词曲:胡彦斌[00:17.59]专辑:《男人歌》[00:21.22]by:水晶心[00:28.75]所有故事停止撕开了幸…

    2022年4月4日
  • 计算机网络体系结构综述(上)[通俗易懂]

    计算机网络体系结构综述(上)[通俗易懂]计算机网络体系结构标准的制定使得两台计算机能够像两个知心朋友那样能够互相准确理解对方的意思并做出优雅的回应。本文首先概述了计算机网络体系结构的提出动机,并结合日常生活中的邮政系统介绍了设计的理念,并给出了相关的基本概念和标准。进一步地,我们着重概述了计算机网络体系结构的分层原理及其最重要的组成部分——协议,使得读者能够对计算网路体系结构有一个全新的、系统的认识。

    2022年7月12日
  • ubuntu android studio_android自启动

    ubuntu android studio_android自启动(1)添加头文件:#include(2)在特定驱动结构体中添加early_suspend结构:#ifdefCONFIG_HAS_EARLYSUSPENDstructearly_suspendearly_suspend;#endif(3)在驱动probe函数中注册相关early_suspend结构体:#ifdefCONFIG_HAS_EARLYSUSPEND

    2022年9月18日
  • FLASH水波纹效果动画制作教程图文自编「建议收藏」

    FLASH水波纹效果动画制作教程图文自编「建议收藏」这个教程很简单也好学,希望对初步认识FLASH的动画爱好者有帮助,废话少说,下面我们开始制作教程吧教程准备,准备一张带水的风景图片为例,其他没有什么需求一,首先打开FLASH软件8.0,这个版本比较好用,设置文档属性为宽550高400,也是软件默认的属性,背景颜色你可以改为自己喜欢的颜色,这个看由你自己选择,在制作时我比较喜欢用黑色,如图设置好文档属性后,我们点击确定,进入

    2022年5月24日
  • luajit的ffi更快的原因_lua return

    luajit的ffi更快的原因_lua returnLuajitffi接口使用小结:1.使用Luajitffi加载C链接库2.使用Luajitffi调用C函数3.使用Luajitffi处理基本类型对象,结构体对象,字符串对象cdata4.cdata赋值及修改本文仅限于使用C链接库,后面文章将介绍使用Luajitffi加载C++链接库

    2022年10月7日
  • HDU 3468 Treasure Hunting(BFS+网络流之最大流)

    HDU 3468 Treasure Hunting(BFS+网络流之最大流)

    2021年12月4日

发表回复

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

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