前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java8学习笔记(一)–Lambda表达式

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

作者头像
全栈程序员站长
发布2022-09-20 10:32:06
1320
发布2022-09-20 10:32:06
举报
文章被收录于专栏:全栈程序员必看

两个概念

函数式接口

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

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

Lambda表达式

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

代码语言:javascript
复制
public int add(int x, int y) {
    return x + y;
}

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

代码语言:javascript
复制
(int x, int y) -> x + y;

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

代码语言:javascript
复制
(x, y) -> x + y; //返回两数之和

或者

代码语言:javascript
复制
(x, y) -> { return x + y; } //显式指明返回值

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

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

步骤:

  1. 新建无参函数式接口(先演示无参);
  2. 新建包含属性为函数式接口的类;
  3. 实现函数式接口;
  4. 测试函数式接口的方法;
新建无参函数式接口
代码语言:javascript
复制
@FunctionalInterface
public interface InterfaceWithNoParam {
    void run();
}
新建包含属性为函数式接口的类
代码语言:javascript
复制
public class TestJava8{
InterfaceWithNoParam param;
}
实现函数式接口
代码语言:javascript
复制
public class TestJava8{
	//匿名内部类
	InterfaceWithNoParam param1 = new InterfaceWithNoParam() {
        @Override
        public void run() {
            System.out.println("通过匿名内部类实现run()");
        }
    };
	//Lambda表达式
            //空括号表示无参
	InterfaceWithNoParam param = () -> System.out.println("通过Lambda表达式实现run()") ;
}
测试函数式接口的方法
代码语言:javascript
复制
@Test
public void testIntfaceWithNoparam() {

    this.param.run();
    this.param1.run();
}
运行结果
Java8学习笔记(一)--Lambda表达式
Java8学习笔记(一)--Lambda表达式

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

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

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

有参无返回值

接口
代码语言:javascript
复制
@FunctionalInterface
public interface InterfaceWithParams {
    void run(String s);
}
实现
代码语言:javascript
复制
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)");
测试
代码语言:javascript
复制
    this.params.run("匿名类");
    this.params1.run("Lambda");
运行
Java8学习笔记(一)--Lambda表达式
Java8学习笔记(一)--Lambda表达式

无参有返回值

接口
代码语言:javascript
复制
@FunctionalInterface
public interface InterfaceUnVoidWithNoParam {
    String run();
}
实现
代码语言:javascript
复制
InterfaceUnVoidWithNoParam interfaceUnVoidWithNoParam = new InterfaceUnVoidWithNoParam() {
    @Override
    public String run() {
        return "Hello World!";
    }
};
InterfaceUnVoidWithNoParam interfaceUnVoidWithNoParam1 = () -> "Hello Lambda!";
测试
代码语言:javascript
复制
    String s = this.interfaceUnVoidWithNoParam.run();
    System.out.println("返回结果是:"+s);
    String s0 = this.interfaceUnVoidWithNoParam1.run();
    System.out.println("返回结果是:"+s0);
运行
Java8学习笔记(一)--Lambda表达式
Java8学习笔记(一)--Lambda表达式

有参有返回值

接口
代码语言:javascript
复制
@FunctionalInterface
public interface InterfaceUnVoidWithParams {
    String run(Integer integer);
}
实现
代码语言:javascript
复制
InterfaceUnVoidWithParams interfaceWithParams = new InterfaceUnVoidWithParams() {
    @Override
    public String run(Integer integer) {
        return String.valueOf(integer);
    }
};
InterfaceUnVoidWithParams interfaceWithParams1 = (Integer integer) -> String.valueOf(integer);
测试
代码语言:javascript
复制
    String s1 = this.interfaceWithParams.run(1);
    System.out.println("您输入的是:"+s1);
    String s2 = this.interfaceWithParams1.run(2);
    System.out.println("您输入的是:"+s2);
运行
Java8学习笔记(一)--Lambda表达式
Java8学习笔记(一)--Lambda表达式

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 两个概念
    • 函数式接口
      • Lambda表达式
        • 新建无参函数式接口
        • 新建包含属性为函数式接口的类
        • 实现函数式接口
        • 测试函数式接口的方法
        • 运行结果
    • Lambda表达式和函数式接口结合
    • 其他形式的函数式接口及实现
      • 有参无返回值
        • 接口
        • 实现
        • 测试
        • 运行
      • 无参有返回值
        • 接口
        • 实现
        • 测试
        • 运行
      • 有参有返回值
        • 接口
        • 实现
        • 测试
        • 运行
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档