Java-Stream-flatMap
2023-03-20 14:48:01 时间
Leave leave1 = new Leave("1","1",new Date(),CollUtil.newArrayList("A","B")); Leave leave2 = new Leave("2","2",new Date(),CollUtil.newArrayList("C","D")); Leave leave3 = new Leave("3","3",new Date(),CollUtil.newArrayList("E","F")); ArrayList<Leave> leaves = CollUtil.newArrayList(leave1, leave2, leave3);
对于上述代码,如果我想取出第4个参数的集合如何处理呢?在flatMap之前,我所能想到的就是暴力的遍历吧,如下:
List<String> resultList = new ArrayList<>(); for (Leave leaf : leaves) { resultList.addAll(leaf.getNameList()); }
这样就将所有的nameList放入一个集合中,但是如果我想用stream流呢?在未了解flatMap前,我可能会用Map,但是map有个问题在于,我想要一个集合,但是Map会生产集合嵌套集合,代码如下:
List<List<String>> resultList = leaves.stream().map(Leave::getNameList).collect(Collectors.toList());
如果我既想用stream,又想要List<String> resultList呢?flatMap闪亮登场:
List<String> resultList = leaves.stream()
.flatMap(leave -> leave.getNameList().stream())
.collect(Collectors.toList());
public static void main(String[] args) { ArrayList<String> strings1 = CollUtil.newArrayList("123", "212", "212"); ArrayList<String> strings2 = CollUtil.newArrayList("abc", "qwe", "qbc"); List<String> collect = Stream.of(strings1,strings2).flatMap(Collection::stream).collect(Collectors.toList()); }
以上flatMap是将相同类型元素合并到一起,既然能合并到一起,那flatMap能不能将一起的元素拆分开呢?以下是将元素进行拆分:
ArrayList<String> list = CollUtil.newArrayList("ABC", "DEF", "GHI");
List<String> collect = list.stream().flatMap(ele -> Stream.of(ele.split(""))).collect(Collectors.toList());
相关文章
- 如何实现PHP长网址与短网址
- 用责任链模式实现 OA 系统中的涨薪流程审批
- PHP的垃圾回收机制——引用计数
- 论HTTP性能,Go与.NET Core一争雌雄
- 【Webpack】devServer 实验报告
- 2017年10月编程语言排行榜:Swift回到第16位
- Go语言大神亲述:历七劫方可成为程序员!
- PHP7中我们应该学习会用的新特性
- 如何将 Swift 代码添加为自定义 LLDB 命令
- Dubbo中用到了哪些设计模式?
- 我对Go语言的错误处理有哪些不满,以及我是如何处理的
- 23种设计模式,我竟然秒懂了...
- 遗传算法中几种不同选择算子及Python实现
- 聊聊React开发的一些坑(一)
- 一个函数超过1000行,可以不?
- 如何不 Review 每一行代码,同时保持代码不被写乱?
- 自上而下,逐步揭开PHP解析大整数的面纱
- 一篇带给你Spring Cloud Sleuth入门介绍
- 程序员编程生涯中常会犯的7个错误
- 如何用Go语言每分钟处理100万个请求