使用 Android Studio 在 Android 中使用 Java Stream Api(Java 8)
Gradle 设置:
build.gradle(模块:app)
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
jackOptions {
enabled true
}
什么是 Stream API?
Stream 是 Java 8 中引入的新抽象层。流是来自流源的一系列元素(对象,基本类型)。因此,stream 不是数据结构,它不存储它使用的元素。它可以是有限的或无限大小,并允许轻松的代码并行性
好处:
- 它有助于以声明方式使用数据。我们可以使用像 Max,Min 等数据库函数,而无需运行完整的迭代。
- 它充分利用了多核架构,而不必担心多线程代码。
- 我们可以使用 Java Stream 创建一个数据操作管道,它可以按顺序或并行运行。
- 它为 group by,order by 等操作提供支持。
- 它支持在函数式编程风格中编写代码。
- 它提供数据的并行处理。
流如何工作:
正常方法(不使用流 Api):
List<Integer> numbers = new ArrayList<>();
numbers.addAll(Arrays.asList(1, 20, 3, 10, 20, 30, 4, 50, 80, 1, 2));//adding dummy data
int i = 0;
List<String> number_str = new ArrayList<>();
for (Integer num : numbers) {
if (i >= 5)//after 5 loop will stop
break;
if (num >= 10) // check number greater than or equal to 10
{
number_str.add(String.format("Number %d", num));//Typecast Integer to String then add to String List
i++;//increment i count
}
}
number_str.sort(Comparator.naturalOrder());//sort the list
在上面的代码中,我们创建了 Integer List 并添加了一些数据然后使用 for 循环迭代。在每次循环执行时,我们检查循环计数(i >= 5
)和 num >=10
。最后排序字符串列表
现在,让我们使用 Java 的 8 Stream API 重写代码:
List<Integer> numbers = new ArrayList<>();
numbers.addAll(Arrays.asList(1, 20, 3, 10, 20, 30, 4, 50, 80, 1, 2));
List<String> number_str = numbers.stream()
.filter(num -> num >= 10)//check num greater than 10
.limit(5)//stop loop at 5
.sorted()//sort the list
.map(num -> String.format("Number %d", num))//typecast into String List
.collect(Collectors.toList());