搜索功能在 Android中也是常碰到一个场景;或者选择功能,就是基于什么来选择什么的功能。碰到这种业务场景我们常规做法:第一想到的就是去找服务器定制接口,传字段返回数组。但是这样会增加服务器的压力。第二就是本地数据库的查询,但是单一功能集成一个数据库进来,不太合适。
Stream java原生的API拯救你!
Stream是java 8新增处理数据的对象。
一句话简介:
Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。
主要介绍一个常用的聚合操作
Stream提供了各种聚合操作 类似SQL语句一样的操作, 比如filter, map, reduce, find, match, sorted等。
例如后台返回了一个数组
List<TripleBean> mDatas = new ArrayList<>();
mDatas.add(new TripleBean("USDT", "BTC"));
mDatas.add(new TripleBean("USDC", "HT"));
mDatas.add(new TripleBean("USDT", "EHT"));
mDatas.add(new TripleBean("USDT", "PAX"));
mDatas.add(new TripleBean("PAX", "BTC"));
mDatas.add(new TripleBean("USDC", "BTC"));
mDatas.add(new TripleBean("CNYB", "BTC"));
public class TripleBean {
private String fromName;
private String toName;
public TripleBean(String fromName, String toName) {
this.fromName = fromName;
this.toName = toName;
}
public String getFromName() {
return fromName;
}
public void setFromName(String fromName) {
this.fromName = fromName;
}
public String getToName() {
return toName;
}
public void setToName(String toName) {
this.toName = toName;
}
}
我们想要查询fromName是“USDT”的数据并以数组形式返回 filter(mDatas, “USDT”);
@RequiresApi(api = Build.VERSION_CODES.N)
public void filter(List<TripleBean> data, String name) {
List<TripleBean> beans = data.stream().filter(new Predicate<TripleBean>() {
@Override
public boolean test(TripleBean bean) {
return bean.getFromName().equals(name);
}
}).collect(Collectors.toList());
//输出
beans.stream().forEach(new Consumer<TripleBean>() {
@Override
public void accept(TripleBean bean) {
LogUtils.out(bean.getFromName() + "-->" + bean.getToName());
}
});
}
可以看到我们通过stream 非常简洁的一个filter +collect 就可以查询并返回一个结果数组。
更多方法入口