5种可以给网站带来流量的方式,国外广告公司名字,音乐分享网站开发,织梦做音乐网站Java 8 的推出引入很多革命性变化#xff0c;加入了函数式编程的特征#xff0c;使基于行为的编程成为可能#xff0c;同时简化了各种设计模式的实现方式#xff0c;是 Java 有史以来最重要的更新。自 Android N 之后#xff0c;由于 JackJill 编译工具链的存在…Java 8 的推出引入很多革命性变化加入了函数式编程的特征使基于行为的编程成为可能同时简化了各种设计模式的实现方式是 Java 有史以来最重要的更新。自 Android N 之后由于 JackJill 编译工具链的存在Java 8 的一些语言功能终于得到了支持。虽然还存在一些限制如新编译器附带的数据绑定支持库无法使用以及注释支持受限等但这完全不足以否定 Java 8 中存在的其他先进功能。在这篇文章中作者介绍了在 Android 中引入 Java 8 功能的四个库希望它们对你有帮助。文章如果有翻译不到位的地方欢迎大家进行指正。喜欢的也不要忘了点赞、打赏、收藏哦Java 8 在 Android M(6.0)及更低版本中的功能Java 8 的发布引入了一些新特性。在所有功能中较为重要的有 lambda 表达式方法引用Stream API 和新的时间日期 API。目前JackJill 编译工具链还处于早期开发阶段它比较容易与 Java 7 保持同步。另外很幸运的是现在有几款库还能将 Android 中 的 Java 8 移植到更低版本的编译器中。让我们来看看它们是如何发挥作用的。Lambda 表达式伴随 Java 8 的发布而发布的 lambda 表达式允许你使用参数传递代码块。它们可以用于代替类的匿名实例例如对单击按钮时执行的操作进行定义。下面我演示了使用匿名类和 lambda 表达式在按钮上设置 onClick 监听器// Anonymous class approach:button.setOnClickListener(new View.OnClickListener() {Overridepublic void onClick(View view) {// onClick action here}});// Lambda expresssion approach:button.setOnClickListener(view - {// onClick action here});用 Retrolambda 实现 Java 6 和 7 中的 Lambda 表达式功能使用 Retrolambda 能很快实现 Java 6 和 Java 7中的Lambda 表达式功能将它应用在 Android 上也是一样。Retrolambda 能转换 Java 8 编译的字节码以便它在更低版本的 Java 中运行此代码而不需要任何附加的依赖关系。要在 Android Studio 项目中使用 retrolambda需要将下列代码添加到项目级别的 build.gradle 文件中buildscript {repositories {jcenter()mavenCentral()}dependencies {classpath com.android.tools.build:gradle:2.1.2classpath me.tatarka:gradle-retrolambda:3.2.5}}...模块级 build.gradle 文件应包含以下突出显示的代码行apply plugin: com.android.applicationapply plugin: me.tatarka.retrolambdaandroid {compileSdkVersion 23buildToolsVersion 24.0.1defaultConfig {applicationId com.example.lambdasminSdkVersion 16targetSdkVersion 23versionCode 1versionName 1.0}buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile(proguard-android.txt), proguard-rules.pro}}compileOptions {sourceCompatibility JavaVersion.VERSION_1_8targetCompatibility JavaVersion.VERSION_1_8}}遵循以上步骤你已经能够成功地在 Android上启用 Java 8 的其中一项功能。方法引用(Method References)方法引用可以很方便地与 lambda 表达式一起使用以简化语法。例如如果一个 lambda 表达式主体包含一个类方法调用它可以替换为一个方法引用Arrays.sort(new Integer[] {1, 2, 3},(first, second) - first.compareTo(second));Arrays.sort(new Integer[] {1, 2, 3}, Integer::compareTo);参数会自动提供以匹配方法签名(method signature)。这里存在三种::运算符用法object::instanceMethodClass::staticMethodClass::instanceMethod你可点击此处了解更多有关方法引用和构造函数引用的信息。如果你已经使用 retrolambda 库启用了 lambda 表达式方法引用此时也能正常运行因为此功能是包含在内的。如果没有请你参考上一节的内容。Stream APIJava 8 另一个了不起的语言特性就是 Stream APIStream 表示抽象层允许开发人员以声明方式处理底层数据。它的另一个好处就是能对 Stream 采取并行执行操作这有利于开发人员有效地处理大量数据而不必为并发和线程管理担心。例如我们有一个数字列表需要过滤出小于 10 的数字然后返回其余的排序列表。使用 Stream API事代码表现更美观List numbers new ArrayList();numbers.addAll(Arrays.asList(1, 20, 3, 10, 20, 30, 4, 50, 80, 1, 2));List large_number numbers.stream().filter(num - num 10).sorted().collect(Collectors.toList());这仅是 Stream API 提供的一个简单示例。 有关 Java 中的 Stream 的更多信息请参阅 Java 8 中的 Stream API。在 Android 中我们有两个库可以从 Stream API 中选择我们来看下Lightweight-Stream-APILightweight-Stream-API 库将 Stream API 反向运行到 Java 7并通过使用迭代器重写 API 来降低版本。该库在原始 Java 8 实现中提供了许多 Stream 操作符其中有一些是新的如sortBygroupBychunkBysampleslidingWindow 等。将库包含到 Android 项目中是为了给 build.gradle 文件中的依赖项添加单独的一行dependencies {...compile com.annimon:stream:1.1.3...}由于该库已经重新实现 Stream API 的方式一些语法会与原始的 Stream 实现不同并且并行执行也被省略。 更多信息请参阅 Github 上的库页面。streamsupport第二个将 Stream API 从 Java 8 回退到更低版本的库就是 streamsupport 库。与 Lighweight-Stream-API 相比streamsupport 除了具有并行执行功能和 Java 9 的增强功能外还有一些其他的功能如Java 8 的功能接口或可选模式。为了在您的项目中使用 streamsupport 库请将以下依赖项添加到 build.gradle 文件中dependencies {compile net.sourceforge.streamsupport:streamsupport:1.5.2compile net.sourceforge.streamsupport:streamsupport-cfuture:1.5.2compile net.sourceforge.streamsupport:streamsupport-atomic:1.5.2compile net.sourceforge.streamsupport:streamsupport-flow:1.5.2compile net.sourceforge.streamsupport:streamsupport-literal:1.5.2}新时间日期 APIJava 8 之前的版本不太支持日期和时间的设置。虽然也有几个支持的 API但它们各自都存在问题。为解决这些问题Java 8 带来了新时间日期你可以点击此处了解更多相关信息。ThreeTen Android Backport虽然 Android 不支持 Java 8 中的时间日期 API但一个名为 ThreeTen Android Backport 的库可以提供相同的功能。使用之前请将以下行添加到 build.gradle 文件中compile com.jakewharton.threetenabp:threetenabp:1.0.4结论在这篇文章中我介绍了在 Android 中引入 Java 8 功能的四个库。 使用这些库您可以在 Android 中使用 lambda 表达式方法引用Stream API 或新日期时间 API而无需迁移到新的 JackJill 编译器工具链同时还能保持与以前版本的 Android 和 Java 的兼容性。