java8新特性stream流的应用
应用 特性 stream java8
2023-09-11 14:22:57 时间
在项目的代码编写中遇到这样一个问题。需要对关联方传递过来的列表数据进行一个筛选校验; 把已经回调传递过来的数据给去掉。然后把没有回调过来的数据再接着进行处理。
问题大致分析如下:
一个集合A包含多个对象,当然这些对象具有相同的属性,另一个集合B包含对象id属性,将A集合对象中存在与B集合对象相同id对象移除。
方法一: 使用递归实现
/**
* 使用递归方式实现(这个方式消耗性能,不推荐)
* @author lyh
* @version v-1.0.0
* @since 2021/5/20
*/
public class RecurTest {
public static void main(String[] args) {
List<Person> listA = new ArrayList<Person>();
//模拟关联方传递过来的数据列表
listA.add(new Person("001", "zs", 18));
listA.add(new Person("002", "ls", 19));
listA.add(new Person("003", "wu", 20));
listA.add(new Person("004", "zl", 21));
//模拟在数据库中查询到的数据id列表
List<String> listB = new ArrayList<String>();
listB.add("002");
listB.add("004");
//将在数据库中查询存在的数据,根据返回的id列表去移除listA中对应的对象
List<Person> listRes = getListRes(listA, listB);
System.out.println(listRes);
//成功将id为002和004的对象移除:[Person(id=001, name=zs, age=18), Person(id=003, name=wu, age=20)]
}
public static List<Person> getListRes(List<Person> listA, List<String> listB) {
for (Person person : listA) {
if (listB.contains(person.getId())) {
listA.remove(person);
//此处使用了递归
return getListRes(listA,listB);
}
}
return listA;
}
}
方法二: 使用stream流实现
/**
* 使用Stream流方式实现(推荐使用这个方式)
*
* @author lyh
* @version v-1.0.0
* @since 2021/5/20
*/
public class StreamTest {
public static void main(String[] args) {
List<Person> listA = new ArrayList<Person>();
//模拟关联方传递过来的数据列表
listA.add(new Person("001", "zs", 18));
listA.add(new Person("002", "ls", 19));
listA.add(new Person("003", "wu", 20));
listA.add(new Person("004", "zl", 21));
//模拟在数据库中查询到的数据id列表
final List<String> listB = new ArrayList<String>();
listB.add("002");
listB.add("004");
//用stream流来处理
List<Person> listRes = listA.stream()
.filter((Person p) -> listB.contains(p.getId()))
.collect(Collectors.toList());
//将要过滤的对象根据id查出来,再利用集合的removeAll方法
listA.removeAll(listRes);
//查看结果,成功将id为002和004的对象移除:[Person(id=001, name=zs, age=18), Person(id=003, name=wu, age=20)]
System.out.println(listA);
}
}
觉得此文不错的,点赞收藏+转发,本人非常感谢!
相关文章
- JAVA WEB应用目录
- 【C#】编写自定义特性与其应用
- 《数据库技术原理与应用教程第2版》——1.2数据及其特性
- 《iOS组件与框架——iOS SDK高级特性剖析》——第6章,第6.1节示例应用简介
- 《实用机器学习》——1.3 实际应用
- 《Web应用漏洞侦测与防御:揭秘鲜为人知的攻击手段和防御技术》——1.4 Web存储
- 增强教育(Augmenting Education)探究AR技术在教学实践中的应用与优势,AR技术在课堂上的崛起
- RunTime 应用实例–关于埋点的思考
- 《黑客大曝光:移动应用安全揭秘及防护措施》一1.3 我们的议题
- 《Tableau数据可视化实战》——1.11节应用筛选器
- 《应用时间序列分析:R软件陪同》——2.2 白噪声
- 生物识别门禁系统要求高 电子锁仍有较大应用市场
- 【快应用】折叠屏手机打开快应用页面重新加载问题
- 【快应用】通知消息定时提醒
- 数据库原理及MySQL应用 | 多表查询
- Block Memory Generator之TDPRAM应用知识点记录
- 在 Android* 商务应用中实施地图和地理围栏特性
- 大数据技术应用于上海基层金融风险综合监测服务平台
- C#特性的介绍及应用场景
- C#特性的介绍及应用场景