Android中使用Streams的两种方法
16lz
2021-01-23
最近的两个项目中都使用了Streams函数(暂且这么叫,这里不想说到函数式编程),一个使用了Java8,另外的是Kotlin,做一下简单的笔记。
使用Java8
1. 安装JDK 8
2. 配置工程,使用Java 8编译工程,在app/build.gradle中添加:
android { compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 }}
3. 使用Lambda。RetroLambda帮助我们把Lambda表达式转为Java 6可以运行的字节码,在build.gradle中配置RetroLambda:
buildscript { repositories { jcenter() } dependencies { classpath 'me.tatarka:gradle-retrolambda:3.2.3' classpath 'me.tatarka.retrolambda.projectlombok:lombok.ast:0.2.3.a2' } configurations.classpath.exclude group: 'com.android.tools.external.lombok'}
4. 使用Streams,引入了一个开源库Lightweight-Stream-API。这个库可以在Java 6的环境运行,但是如果没有Lambda,代码中的匿名类和回调会显得十分臃肿和笨拙。下面是引入这个库的配置,在app/build.gradle中添加依赖:
dependencies { compile 'com.annimon:stream:1.0.3'}
OK,齐活,show个Demo:
String[] names = new String[] { "Amy", "Alex", "Bob", "Cindy", "Jeff", "Jack", "Sunny", "Sara", "Steven" }; //筛选S开头的人名 Stream.of(names) .filter(name -> name.startsWith("s")) .collect(Collectors.toList()); //按首字母分组并排序 List>> group = Stream.of(names) .groupBy(name -> String.valueOf(name.charAt(0))) .sortBy(Map.Entry::getKey) .collect(Collectors.toList());
Kotlin
Kotlin,JetBrains开发的一种语言,语法个人感觉和C#很相似,现在还是Beta版本,能不能火起来真不好说。不过好多的开源库已经有Kotlin的实现了。Android开发的配置也很简单,Android Studio安装一个Kotlin插件就好了。这是官网的指南:Getting started with Android and Kotlin。下面是我的项目的配置:
app/build.gradle
apply plugin: 'kotlin-android'android { sourceSets { main.java.srcDirs += 'src/main/kotlin' }}dependencies { compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"}buildscript { ext.kotlin_version = '1.0.0-beta-4584' repositories { jcenter() } dependencies { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version" }}
目录结构: kotlin目录下都是.kt文件,这样就可以混合使用Java和Kotlin了。简单的例子:
val names = arrayOf("Amy", "Alex", "Bob", "Cindy", "Jeff", "Jack", "Sunny", "Sara", "Steven") //筛选S开头的人名 val sName = names.filter { it.startsWith("S") }.toList() //按首字母分组并排序 val nameGroup = names.groupBy { it[0] } .toSortedMap( Comparator { key1, key2 -> key1.compareTo(key2) })
更多相关文章
- Android Audio代码分析17 - setvolume函数
- 【android】说说GestureDetector.OnGestureListener onScroll函
- Android下openGL操作矩阵的函数
- Android中常用的函数
- Android下intent的setdata、settype和setdataandtype函数
- C基础—函数指针,联合体,枚举,结构体和结构体指针
- Android的按钮监听事件&自定义回调函数
- android JNI层线程回调Java函数
- 硬件访问服务4之Android硬件访问服务框架及系统函数全详细实现