欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Lambda表达式的使用实例(转载)

程序员文章站 2022-05-22 21:22:54
...

1、首先介绍下什么是Lambda?

我们知道,对于一个Java变量,我们可以赋给其一个“值”。
如果你想把“一块代码”赋给一个Java变量,应该怎么做呢?
比如,我想把右边那块代码,赋给一个叫做aBlockOfCode的Java变量:
Lambda表达式的使用实例(转载)

在Java 8之前,这个是做不到的。但是Java 8问世之后,利用Lambda特性,就可以做到了。 为了使这个赋值操作更加elegant, 我们可以移除一些没用的声明。 如下图:
Lambda表达式的使用实例(转载)

这样,我们就成功的非常优雅的把“一块代码”赋给了一个变量。而“这块代码”,或者说“这个被赋给一个变量的函数”,就是一个Lambda表达式。

2、其次—————————-Android 项目中使用——————————————
如果想要在 Android 项目中使用 Lambda表达式 或者 Java8 的其他新特性,首先我们需要安装Java8版本的JDK,然后在 app/build.gradle 中添加以下配置

android {
  ...
  defaultConfig {
    jackOptions.enabled = true
  }
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }
}

之后就可以开始使用Lambda表达式了:
比如使用Lambda表达式开启子线程的写法是:
// 传统方式

new Thread(new Runnable() {
  @Override
  public void run() {
    // 处理业务逻辑
  }
}).start();

// 使用Lambda表达式
new Thread(() -> {
  // 处理业务逻辑
}).start();

不管是从代码行数上还是缩进结构上看,Lambda表达式的写法更加精简。为什么可以这么写呢?我们看一下 Runnable 接口的源码:

public interface Runnable {
  void run();
}

凡是这种只有一个待实现方法的接口,都可以使用 Lambda表达式的写法。

Android中点击事件使用Lambda表达式:

button.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View view) {
    // 处理点击事件
  }
});
使用Lambda表达式后:
button.setOnClickListener((v) -> {
  // 处理点击事件
});
另外,当接口只有一个参数时,我们还可以进一步简化,将参数外面的括号去掉:
button.setOnClickListener(v -> {
  // 处理点击事件
});

3、下面列举了Lambda表达式的几个最重要的特征:

  1. 可选的类型声明:你不用去声明参数的类型。编译器可以从参数的值来推断它是什么类型。
  2. 可选的参数周围的括号:你可以不用在括号内声明单个参数。但是对于很多参数的情况,括号是必需的。
  3. 可选的大括号:如果表达式体里面只有一个语句,那么你不必用大括号括起来。
  4. 可选的返回关键字:如果表达式体只有单个表达式用于值的返回,那么编译器会自动完成这一步。若要指示表达式来返回某个值,则需要使用大括号。
    函数式接口的重要属性是:我们能够使用 Lambda 实例化它们,Lambda表达式让你能够将函数作为方法参数,或者将代码作为数据对待。Lambda 表达式的引入给开发者带来了不少优点:在 Java 8之前,匿名内部类,监听器和事件处理器的使用都显得很冗长,代码可读性很差,Lambda表达式的应用则使代码变得更加紧凑,可读性增强;Lambda 表达式使并行操作大集合变得很方便,可以充分发挥多核 CPU的优势,更易于为多核处理器编写代码。引用自IBM - Java 8 新特性概述。

参考:https://blog.csdn.net/GoGleTech/article/details/79454151
https://www.jb51.net/article/112739.htm

相关标签: lambda