lambda表达式介绍以及Android Studio引入lambda

50 篇文章 8 订阅
28 篇文章 0 订阅

一、简介

“Lambda 表达式”(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。Lambda表达式可以表示闭包。

运算符将表达式分为两部分,左边指定输入参数,右边是lambda的主体。
        lambda表达式:
               1.一个参数:param=>expr
               2.多个参数:(param-list)=>expr

二、JAVA中Lambda表达式的使用

Java 8比较吸引人的新特性需要有两个lambda表达式和流API

lambda表达式实现Runnable

//Java 8之前
new Thread(new Runnable() {
@Override
public void run() {
	System.out.println("Before Java8, too much code for too little to do");
}
}).start(); 

//Java 8方式
new Thread( () -> System.out.println("In Java8, Lambda expression rocks !!") ).start();

lambda表达式进行事件处理

// Java 8之前
JButton show =  new JButton("Show");
show.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
    System.out.println("Event handling without lambda expression is boring");
    }
});

// Java 8方式
show.addActionListener((e) -> {
    System.out.println("Light, Camera, Action !! Lambda expressions Rocks");
});


使用lambda表达式对列表进行迭代
// Java 8之前
List features = Arrays.asList("Lambdas", "Default Method", "Stream API", "Date and Time API");
for (String feature : features) {
    System.out.println(feature);
}
	
// Java 8方式
List features = Arrays.asList("Lambdas", "Default Method", "Stream API", "Date and Time API");
features.forEach(n -> System.out.println(n));
// 使用Java 8的方法引用更方便,方法引用由::双冒号操作符标示,
features.forEach(System.out::println);

三、lambda表达式与匿名类的区别

一个关键的不同点就是关键字 this。匿名类的 this 关键字指向匿名类,而lambda表达式的 this 关键字指向包围lambda表达式的类。另一个不同点是二者的编译方式。Java编译器将lambda表达式编译成类的私有方法。使用了Java 7的 invokedynamic 字节码指令来动态绑定这个方法。

四、Android Studio中使用lambda

有两种方式

第一种方式是原生支持在app的build.gradle中配置

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

第二种方法是通过第三方库支持

buildscript {
  repositories {
     mavenCentral()
  }

  dependencies {
     classpath 'me.tatarka:gradle-retrolambda:3.2.3'
  }
}

// Required because retrolambda is on maven central
repositories {
  mavenCentral()
}

apply plugin: 'com.android.application' //or apply plugin: 'java'
apply plugin: 'me.tatarka.retrolambda'


欢迎扫描二维码,关注公众号


  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值