关闭

lambda表达式基础

标签: lambdajava技术博客设计
39人阅读 评论(0) 收藏 举报
分类:

元旦节即将结束,又是新的一年,将要学习新的技术,寻找新的人生。

博客之路从今天开始,愿明天来得更快些!


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!

 


0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

最简单的Lambda入门教程

Lambda简介Lambda作为函数式编程中的基础部分,在其他编程语言(例如:Scala)中早就广为使用,但在JAVA领域中发展较慢,直到java8,才开始支持Lambda。抛开数学定义不看,直接来认...
  • dd864140130
  • dd864140130
  • 2016-01-28 21:50
  • 8562

Java8体验(一)lambda表达式语法

java8的安装 工欲善其器必先利其器,首先安装JDK8。过程省略,大家应该都可以自己搞定。但是有一点这里强调一下(Windows系统):目前我们工作的版本一般是java 6或者java 7,所以很...
  • youzhouliu
  • youzhouliu
  • 2016-07-04 12:42
  • 1204

[深入学习C#]LINQ查询表达式详解(1)——基本语法、使用扩展方法和Lambda表达式简化LINQ查询

简介  在Git上下载源码   在工程中我们少不了要定义类或者结构去储存数据,这些数据将被临时地储存在内存中,现在我们想要对其完成一些类似于查找、过滤等等常见的任务的时候,我们该如何去做呢?   ...
  • honantic
  • honantic
  • 2015-06-12 15:56
  • 5006

python基础(07)——递归,lambda表达式,数学函数

#递归 def tubie(no): print(no) if no > 0: tubie(no -1) else: print('____')...
  • tianabao
  • tianabao
  • 2018-01-01 16:47
  • 15

[C# 基础知识系列]专题十四:深入理解Lambda表达式

引言:    对于刚刚接触Lambda表达式的朋友们,可能会对Lambda表达式感到非常疑惑,它到底是个什么什么样的技术呢?以及它有什么好处和先进的地方呢?下面的介绍将会解除你这些疑惑。 ...
  • lizhi3186575
  • lizhi3186575
  • 2013-12-20 23:27
  • 1091

Python基础语法笔记--xrange()与range()的区别、map、filter、reduce分析、lambda表达式

xrange与range的区别     在for循环中使用xrange与range函数,利用help函数,查的他们的用法如下: range: range(...) range(stop) ->...
  • Hearthougan
  • Hearthougan
  • 2016-10-13 12:44
  • 701

Java基础学习总结(44)——10个Java 8 Lambda表达式经典示例

Java 8 刚于几周前发布,日期是2014年3月18日,这次开创性的发布在Java社区引发了不少讨论,并让大家感到激动。特性之一便是随同发布的lambda表达式,它将允许我们将行为传到函数里。在Ja...
  • u012562943
  • u012562943
  • 2016-08-01 09:30
  • 1455

Lambda表达式基础认识

原文链接: Start Using Java Lambda Expressions 下载示例程序 Examples.zip 。 原文日期: 2014年4月16日 翻译日期: 2014年4月27日 翻译...
  • wanniu
  • wanniu
  • 2016-11-07 16:48
  • 392

JAVA基础之--Lambda表达式,枚举类,垃圾回收机制,修饰符的使用范围

Lambda表达式是java8的重要更新,也是被广大程序员期待已久的新特性。 /* * 1.Lambda表达式支持将代码块作为方法的参数;允许使用更加简洁的代码创建只有一个抽象方法的接口(函数式接口...
  • liuxins
  • liuxins
  • 2016-05-17 15:45
  • 920

Java基础——Lambda表达式

Lambda表达式是Java8的重要更新。Lambda表达式支持将代码块作为方法参数,Lambda表达式允许使用更简洁的代码来创建只有一个抽象方法的接口(这种接口被称为函数式接口)的实例。
  • qq_35073878
  • qq_35073878
  • 2016-11-04 21:46
  • 130
    个人资料
    • 访问:41次
    • 积分:10
    • 等级:
    • 排名:千里之外
    • 原创:1篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档
    阅读排行
    评论排行