Android 中Stream 的使用

Steam的使用,会使你告别繁琐的for循环,一句代码搞定集合中数据的提取,
使你的代码更简洁,优雅。

一、使用的包名

由于Stream在Android中使用时,SDK必须大于24才能使,这样导致小于24的没法使用。
什么玩意?好不容易学会一个书写格式还不兼容,这可如何是好,哈哈哈,看我的,通顺的不大鸟啊,来走起。
首先在app\build.gradle中添加引用的库;如下:

implementation 'com.annimon:stream:1.2.1'

二、具体的使用

1、获取集合中符合条件的数据集合

比如你有一个Person.java类,如下

public class Person {
    private int age;
    private String name;
    private boolean check;

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public boolean isCheck() {
        return check;
    }

    public void setCheck(boolean check) {
        this.check = check;
    }

   

    @Override
    public String toString() {
        return "Person{" +
                "age=" + age +
                ", name='" + name + '\'' +
                ", check=" + check +
                '}';
    }
}

从集合ArrayList中获取age>20 的数据集,代码如下:

ArrayList arrayList = new ArrayList<>();
List ages = Stream.of(arrayList).
	filter(person -> person.getAge() > 20).
	collect(Collectors.toList());

2、从集合中获取符合条件的字段集合

从ArrayList里获取姓名的集合。

ArrayList arrayList = new ArrayList<>();
List names = Stream.of(arrayList)
	.map(Person::getName)
	.collect(Collectors.toList());

3、将Person集合ArrayList转化成User集合

User.java 如下:

public class User {
    private String name;
    public User(String name){
        this.name=name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                '}';
    }
}

取出Person类中name重新构建成User的结合:

List userList = Stream.
        of(arrayList).
        map(person -> new User(person.getName())).
        collect(Collectors.toList());

Sream返回的结果是List集合,如果你需要ArrayList集合,只需要强转类型即可。
如:

ArrayList names = (ArrayList) Stream.of(arrayList)
	.map(Person::getName)
	.collect(Collectors.toList());

三、注意

在导包的时候,要导如下:

import com.annimon.stream.Collectors;
import com.annimon.stream.Stream;

四、Stream的其他函数

什么是 Stream?
Stream(流)是一个来自数据源的元素队列并支持聚合操作
元素是特定类型的对象,形成一个队列。

  • Java中的Stream并不会存储元素,而是按需计算。
  • 数据源 流的来源。 可以是集合,数组,I/O channel, 产生器generator 等。
  • 聚合操作 类似SQL语句一样的操作, 比如filter, map, reduce, find, match, sorted等。
    和以前的Collection操作不同, Stream操作还有两个基础的特征:
  • Pipelining: 中间操作都会返回流对象本身。 这样多个操作可以串联成一个管道, 如同流式风格(fluent style)。 这样做可以对操作进行优化, 比如延迟执行(laziness)和短路( short-circuiting)。
  • 内部迭代: 以前对集合遍历都是通过Iterator或者For-Each的方式, 显式的在集合外部进行迭代, 这叫做外部迭代。 Stream提供了内部迭代的方式, 通过访问者模式(Visitor)实现。
    Stream 函数方法不多,根据自己的需要可以看,左边都有给相应的例子,告诉你怎么写了。

Android 中Stream 的使用_第1张图片

你可能感兴趣的:(Android 中Stream 的使用)