在Android上使用Lambda表达式 - retrolambda插件

免流量全局代理apk 移动联通电信的免流量神器,最新版本,用法很简单,后期发布可免模式 立即下载

Update: Android Jack编译工具的加入使得我们可以在旧平台上也使用Lambda表达式了,最重要这是官方支持哦,具体内容看我的这篇:《在Android上使用官方Lambda支持 - Android N & Jack工具(兼容旧平台)》

Java8比较大的一个变化是加入了Lambda表达式,一种紧凑的,传递行为的方式。它可以使你的代码更简洁、逻辑更清晰。特别是用Rxjava的时候,将各种数据变换使用Lambda表达式来简化,可以最大化的减少样板代码,使整个数据流的处理逻辑十分清晰(下面会有个例子)。

retrolambda又是什么呢?它是 Java 5/6/7 中对Java8 Lambda 表达式的非官方兼容方案。因为目前Android的所有版本(除了N Preview),都还不支持java8。

Github上搜索retrolambda,前两个最多星的就是我们的目标了。分别是evant/gradle-retrolambda和orfjackal/retrolambda。他们之间是啥关系呢?简单来说,gradle-retrolambda只是AS的一个gradle插件,他里面也依赖第二个开源库orfjackal/retrolambda。所以这里我们直接选第一个进行配置。

  • Step1
    下载jdk8(可以与jdk7并存)
  • Step2
    修改系统环境变量,设置好JAVA7_HOME和JAVA8_HOME(为了方便下面插件的配置)
  • Step3
    修改build.gradle文件,加入以下构建脚本即可(详见:README):
apply plugin: 'me.tatarka.retrolambda'

buildscript {
  repositories {
     mavenCentral()
  }

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

retrolambda {
    jdk System.getenv("JAVA8_HOME")
    oldJdk System.getenv("JAVA7_HOME")
    javaVersion JavaVersion.VERSION_1_7
}

android {
    ...
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

(注意:若你使用的gradle plugins版本是2.0.0,你应该使用最新的3.3.0-beta4 gradle-retrolambda插件。)

  • Step4
    项目默认是依赖v2.1.0版本的retrolambda库,你可以手动更改此依赖(如修改为最新的2.3.0版本,如果不想修改可以直接跳过这步):
dependencies {
  // Latest version 2.3.0
  retrolambdaConfig 'net.orfjackal.retrolambda:retrolambda:2.3.0'
  // Or a local version
  // retrolambdaConfig files('libs/retrolambda.jar')
}
  • Step5
    执行Gradle Sync Project,稍等AS下载好相关插件及依赖库,就可以开始写Lambda表达式了。下面是一个简单的例子,分别是加入Lambda表达式前后的对比,大家随意感受一下:

没有使用Lambda表达式:

Observable.from(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10))
    .filter(new Func1<Integer, Boolean>() {
        @Override
        public Boolean call(Integer integer) {
            return integer % 2 == 0;
        }
    })
    .map(new Func1<Integer, Integer>() {
        @Override
        public Integer call(Integer integer) {
            return integer * integer;
        }
    })
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe(new Action1<Integer>() {
        @Override
        public void call(Integer integer) {
            System.out.println(integer);
        }
    });

加入Lambda表达式后:

Observable.from(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10))
    .filter(integer -> integer % 2 == 0)
    .map(integer -> integer * integer)
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe(integer -> System.out.println(integer));

是不是感觉代码更加清爽、样板代码更少、整个数据的处理逻辑更加清晰了?Lambda表达式的语法也不多,学习成本较少,还没尝试的童鞋可以导入到项目里面耍耍了。

trans-proxy:实现简单透明代理功能 trans-proxy透明代理 代理: 正向代理:代理客户端来访问外部资源,需要客户端设置代理服务器 反向代理:代理服务器,接受客户端请求,需要客户端设置代理服务器 透明代理:被代理的对象无需配置,可进行无感知的代理 正向透明代理 顾名思义,客户端访问外部资源时,被无感知的进行流量代理。 trans-proxy项目设计思路 当[客户端]流量经过[代理服务器]时,借助iptables,将[客户端]的流量重定向到本地端口(代理服务程序) 由[代理服务程序]与[客户端]进行通信 [代理服务程序]获取[客户端]要访问的[目的端],由[代理服务程序]与[目的端]进行通信 [代理服务程序]将[客户端]发送的请求数据重新发送给[目的端] [代理服务程序]将[目的端]发送的响应数据发送给[目的端] 技术思考 整个通信过程都是通过Socket完成。根据一些高性能高并发的服务开发模式,使用异步非阻塞. 非阻塞 立即下载

相关推荐

避坑指南:Windows下OpenCV摄像头索引混乱问题的3种解决之道

本文详细解析了Windows下OpenCV摄像头索引混乱问题的3种解决方案,包括GUID查询法、DirectShow接口集成和注册表固化技术。针对工业视觉和智能监控场景,提供实战代码和性能优化建议,帮助开发者稳定识别多路摄像头设备,有效解决VideoCapture接口的索引漂移问题。

weixin_30836759的博客 406

TransProxy3.08beta.apk下载

经常要调试安卓手机,设置代理进行抓包,但是安卓手机设置代理非常麻烦,而且安卓4.0以下版本,设置代理也不生效,需要安装这个工具,上传到这里方便自己使用吧,注:下载后改名为apk即可在安卓手机上安装,且手机必须root,否则无法使用 TransProxy3.08beta.apk  首发:http://beinet.cn

北亮的专栏 7702

保姆级教程:用NX机电概念设计与RobotStudio实现ModbusTCP联合仿真(附完整代码)

本文提供了一份详细的NX机电概念设计与RobotStudio联合仿真实战教程。通过ModbusTCP协议构建数据桥梁,实现机械行为与机器人控制逻辑的双向实时同步。文章从环境搭建、信号配置、RAPID代码编写到联合调试,逐步拆解了实现数字孪生核心链路的关键步骤,并分享了常见问题排查方法,助力工程师在虚拟环境中提前验证产线协同。

sat99的博客 1098

retrolambda使用教程

java8开始引入了Lambda,但是怎么在低版本的java使用呢!采用 retrolambda插件。 配置 retrolambda的步骤: 1、在Project级gradle中添加classpath 'me.tatarka:gradle-retrolambda:3.2.5',如下图所示: 2、在Module级的gradle中添加: apply plugin: 'me.tatark

zhupumao的博客 3706

COMSOL+AI实战:5个超实用技巧让你的仿真效率翻倍(附Python代码)

本文详细介绍了如何将人工智能(AI)与COMSOL仿真软件结合,通过Python脚本实现五大实用技巧,包括自动化生成数据集、构建代理模型、集成AI优化算法、利用神经网络加速场量求解以及智能结果分析,从而显著提升多物理场仿真的效率和自动化水平。

weixin_29230865的博客 443

把 SAP Query 用到极致:ABAP Query 的核心概念、配置流程、权限与运输治理全解析

摘要:SAP Query 是一款面向业务用户的自助报表工具,可解决标准报表无法满足业务需求的问题。其核心由四大组件构成:Queries(报表定义)、InfoSets(数据视图)、User Groups(权限分组)和Translation(多语言支持)。通过SQ03、SQ02、SQ01事务码分步创建用户组、数据视图和查询,业务用户无需ABAP知识即可生成Basic List(明细)、Statistics(统计)和Ranked List(排名)三种报表形式。典型案例展示了如何为采购部门设计包含明细追溯和Top1

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 179

Android Studio中使用Retrolambda插件

在Android Studio当中是默认不支持lambda表达式的。可以配置Retrolambda插件来使用lambda语法Retrolambda插件github需安装Java8环境查看已安装的jdk版本方法如下: 在Android Studio需要对以下文件进行修改:1.build.gradle (Project ) 在buildscript->dependencies中添加:classpa

曹半斤 2042

RK3576 USB3.0 DWC3控制器调试:PHY初始化失败排查指南

DWC3 是 Synopsys 公司推出的 USB3.0/3.1 控制器 IP,支持双角色(DRD)模式,可配置为 Host、Device 或 OTG。

小灰灰的博客 1177

android studio lambda插件,在Android Studio中使用Lambda表达式(retrolambda)

在Android Studio中使用Lambda表达式要在Android Studio中使用Lambda表达式,需要借助一个gradle插件来完成。A gradle plugin for getting java lambda support in java 6, 7 and android按照项目中所说,使用这个插件的方式如下:第1步:首先jdk版本是1.8 没有就下载或者升级一下第2步:设置这...

weixin_31849265的博客 324

C#上位机部署YOLO模型:ONNX转换+推理加速+内存优化全攻略

本文针对C#上位机部署YOLO模型的三大痛点,提供从模型转换到优化部署的完整解决方案。首先介绍将YOLO模型转换为ONNX格式的必要性和方法,包括自动和手动两种转换方案及常见问题解决。然后详细讲解C#环境配置和基础部署流程,包括图像预处理、模型加载、推理计算和结果解析。最后提出推理加速和内存优化策略,通过硬件适配、多线程处理和资源复用等技术手段,实现工业场景下的高效稳定运行。全文提供可直接复用的代码片段和实测验证方案,覆盖YOLOv5/v7/v8全版本,帮助开发者快速实现轻量化部署。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 785

Android 编译系统(Build System)剖析

make是一种自动化构建工具,通过读取Makefile将源代码自动编译为可执行程序和库文件。

虎哥LoveDroid 2167

Android Studio中配置Retrolambda插件【mac】

  转载请注明出处:http://blog.youkuaiyun.com/yudbl/article/details/78603669   最近用到lambda语法,所以博客记录总结下。配置Retrolambda插件来使用lambda语法   Java8比较大的一个变化是加入了Lambda表达式,一种紧凑的,传递行为的方式。它可以使你的代码更简洁、逻辑更清晰。特别是用Rxjava的时候,将各种数据变...

鲁迷那的专栏—坚持实践后再写出来! 584

ABAP ALV 导出总被锁死为固定格式?把 Always Use Selected Format 一键重置到可选状态

摘要:SAP ALV报表导出时勾选"Always Use Selected Format"会导致导出格式被锁定,无法切换格式。文章分析该问题原因(系统持久化配置),提供用户自助解法(ALV list使用&RESET_EXCEL命令码,ALV grid通过右键菜单恢复弹窗),管理员治理方案(使用SALV_BS_ADMIN_MAINTAIN报表批量处理),并指出SAP_BASIS 7.02版本的特殊处理方式(需参考SAP Note 1716802和1590484)。最后给出排障清单,

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 218

Android使用Lambda表达式 - retrolambda插件(优缺点)

lambda是在jdk1.8之后引入的,所以说lambda怎么支持jdk1.8之前的jdk版本呢,还是之前的套路提供了插件的形式(retrolambda) 在android-studio中配置retrolambda插件的步骤: 在build.gradle(project)中配置如下: classpath 'me.tatarka:gradle-retrolambda:3.2.5' 在

老花的博客 3219

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Android Studio 添加retrolambda插件,实现Lambda表达式,与RxJava结合

Android Studio 添加retrolambda插件,实现Lambda表达式,与RxJava结合 配置方法就如图所示

wahahaha18的博客 400

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Android Studio Lambda插件(gradle-retrolambda)安装

1.前言 java jdk升级到1.8以上以后就可以使用lambda表达式了,其优点就是 高逼格 更简洁, 需要注意的是 使不使用lambda 要看项目需求是否允许。 本文简单介绍 Android Studio gradle-retrolambda插件的安装. 2.在根build.gradle中进行如下配置 buildscript { repositories { jce...

zuochunsheng的博客 532

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Gradle Retrolambda 插件使用教程

Gradle Retrolambda 插件是一个用于在 Java 6 或 7 环境中启用 Java 8 的 Lambda 表达式支持的 Gradle 插件。该项目由 Evan Tatarka 开发,基于 Esko Luontola 的 Retrolambda 项目。该插件允许开发者在不升级 Java 版本的情况下,使用 Java 8 的 Lambda 特性,适用于 Java 和 Android 项...

gitblog_00019的博客 450

gradle-retrolambda终极指南:让Android开发者拥抱Java 8 Lambda表达式

作为Android开发者,你是否曾羡慕Java 8中那些简洁优雅的Lambda表达式,却因为Android系统兼容性问题而无法使用?gradle-retrolambda插件正是解决这一痛点的终极利器!✨ gradle-retrolambda是一个强大的Gradle插件,它允许开发者在Android项目中使用Java 8的Lambda表达式、方法引用等现代语言特性,并通过Retrolambda技术

gitblog_00257的博客 1086

retrolambda在Android studio中的使用

retrolambda在Android studio中的使用 概述 JDK升级到1.8以后就可以使用lambda表达式了,这个表达式让代码变得更加的简洁更加的高逼格,接下来就讲一讲如何在Android studio中使用lambda。Android studio要使用lambda有两种办法一种是使用官方的jack lambda插件一种是使用非官方但很牛叉的retrolambda。 1.jack ...

ht1063899049的博客 2551

android: 在android studio中使用retrolambda的步骤

找了各种说明,包括retrolambda官方文档都没有试成功最后在这个链接中找到答案:http://blog.youkuaiyun.com/qq_26819733/article/details/52225653 开发环境:1)android studio 2.3.12)jdk:jdk8.03)新建工程的minSdkVersion,15测试环境:1)荣耀6,安卓4.4.22)Mate8,安卓7.0亲测有效...

weixin_30702413的博客 66

Gradle Retrolambda 项目常见问题解决方案

Gradle Retrolambda 项目常见问题解决方案 gradle-retrolambda evant/gradle-retrolambda: gradle-retrolambda 插件允许开发者在 Android 项目中使用 Java 8 的 Lambda 表达式和其他现代语言特性,并通过 Retrolambda...

gitblog_00023的博客 634

android Studio Lambda插件(gradle-retrolambda)安装

0、前言 其实呢开始的是很不想安装的因为网上那些文章写得不明不白,还有github上面的软件仓库是mavenCentral(),而我默认的是jcenter()啊,这就坑了,全部改为mavenCentral()我的v7包还报错,总之坑啊,不过无聊还是给安装上了。 1、环境简介 android studio:2.1.3 gradle版本:2.14.1 java:jdk1.8 配置JA

Hitvz的博客 1万+

gradle-retrolambda完整学习指南:从入门到精通的终极资源汇总

想要在Android项目中体验Java 8的Lambda表达式魅力吗?gradle-retrolambda插件就是你的完美解决方案!这款强大的Gradle插件能够将Java 8的现代语言特性转换为可在Java 6或7上运行的字节码,让你的Android开发更加高效优雅。🚀 ## 📚 核心文档资源 **官方文档**是学习gradle-retrolambda的最佳起点。项目根目录下的READM

gitblog_00434的博客 775
上一篇: Android中使用Picasso将图片直接转换为圆形
下一篇: 在Android上使用官方Lambda支持 - Android N & Jack工具(兼容旧平台)
大_熊_
博客等级 码龄14年 88粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值