元旦节即将结束,又是新的一年,将要学习新的技术,寻找新的人生。
博客之路从今天开始,愿明天来得更快些!
Java 8的一个大亮点是引入Lambda表达式,使用它设计的代码会更加简洁。本文将以3W的原则介绍Lambda表达式
一、What?
1、来历简介
"Lambda 表达式 "(lambda expression) 是一个匿名函数, Lambda 表达式基于数学中的 λ 演算得名,其是一个匿名函数,即没有函数名的函数 所以试着使用匿名函数的方式来理解, Lambda 表达式在Java中的实现,有两个重要结构:( 1)、 Lambda表达式本身;(2)、函数接口。
2、语法体系
lambda表达式包括三个部分:参数、Lambda操作符、方法体;
(1)、参数(parameters):小括号(“()”)括起来的部分,可以包含一个或者多个,可以一个也没有,但小括号不可省略;
(2)、Lambda操作符:也叫箭头操作符( ->);
(3)、方法体:可以是表达式和代码块,方法体函数式接口里面方法的实现,如果是代码块,则必须用 {} 来包裹起来,且需要一个 return 返回值,但有个例外,若
函数式接口里面方法返回值是 void ,则无需 {},结构如下:
(params) -> { statements } //有参代码块
() -> { statements } //有参代码块
(params) -> expression //有参表达式
() -> expression //无参表达式
二、Why?
1、更加紧凑的代码,使用Lambda可以有效控制代码量,加快工作效率;
2、更好地支持多核处理 ,我们可以很方便地并行操作大集合,充分发挥多核CPU的潜能;
3、学习RxJava的基础,因为RxJava的操作符等方面会大量用到Lambda表达式。
三、How?
1、如何在代码中使用:
Android Studio默认使用Lambda表达式是会报错的,即使你使用的是Java8,为了在android studio中使用lambda表达式,我们必须借助一个插件retrolambda,该插件将Java 8中的lambda表达式特性兼容到java 5。使用它也很简单。
(1)、安装JDK1.8以上版本
(2)、在项目(Project)的Gradle文件中的dependencies节点下添加以下代码:
classpath 'me.tatarka:gradle-retrolambda:3.3.1'
(3)、在模块(Module) 的Gradle文件中添加以下代码,使用插件
apply plugin: 'me.tatarka.retrolambda'
(4)在模块(Module)的Gradle文件中的Android节点下添加代码:
compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 }
(5)在项目中使用
package com.lizihanglove.rxandroid;import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } private void initView() { Button button = (Button) findViewById(R.id.btn_test); button.setOnClickListener((View view) -> Log.i("MainActivity","lambda!") ); } }
(6)运行结果
01-03 01:14:42.533 11508-11508/com.lizihanglove.rxandroid I/MainActivity: lambda!