java8中 map和flatmap的理解
2024-09-07 10:10:16
假如我们有这样一个需求给定单词列表["Hello","World"],你想要返回列表["H","e","l", "o","W","r","d"],
对于这样的需求,我们可能想到的第一个版本可能是这样子的:
words.stream()
.map(word -> word.split(""))
.distinct()
.collect(toList());
这个方法的问题在于,传递给map方法的Lambda为每个单词返回了一个String[](String
列表)。因此, map 返回的流实际上是Stream<String[]> 类型的。你真正想要的是用
Stream<String>来表示一个字符流。因此,这是行不通的。
以下是我对这个问题的解法和分步写法,希望能对你有帮助:
String ss = "Hello"; String[] aa = ss.split(""); String[] bb = {"H", "e", "l", "l", "o"}; String[] strings = {"Hello", "World"}; //Arrays.stream接收一个数组返回一个流
List<Stream<String>> streamList = Arrays.asList(strings).stream().
map(str -> str.split("")).
map(str -> Arrays.stream(str)).
collect(Collectors.toList()); //分步写(map) Stream<String[]> stream = Arrays.asList(strings).stream().
map(str -> str.split("")); Stream<Stream<String>> streamStream = stream.map(strings1 -> Arrays.stream(strings1));
List<Stream<String>> streamList1 = streamStream.collect(Collectors.toList()); List<String> stringList = Arrays.asList(strings).stream().
map(str -> str.split("")).
flatMap(str -> Arrays.stream(str))
.collect(Collectors.toList()); //分步写(流只能消费一次)(flatMap)
Stream<String[]> stream1 = Arrays.asList(strings).stream().
map(str -> str.split("")); Stream<String> stringStream = stream1.flatMap(strings1 -> Arrays.stream(strings1)); List<String> stringList1 = stringStream.collect(Collectors.toList()); 对flatMap的说明:这个在这里的主要作用是对流进行扁平化
最后给大家推荐一个专栏,http://gk.link/a/10fxp
最新文章
- 深入理解javascript系列(4):立即调用的函数表达式
- 用AE (Adobe After Effects) 处理视频
- Android开源框架:Universal-Image-Loader解析(一)
- 基础学习day05---面向对象一类,对象、封装
- WPF 文本框添加水印效果
- 经典JSP数据库连接(ORACLE、SQL Server、MySQL)
- hdu 3046 Pleasant sheep and big big wolf 最小割
- Python [Leetcode 141]Linked List Cycle
- kaggle之手写体识别
- 别说你不知道java中的包装类,wrapper type,以及容易在自动拆箱中出现的问题
- Java泛型范例
- python>;oop
- windwos 下编译minicap
- 【Ruby】【基础】
- zabbix server配置文件参数详解
- 15款Django开发常用软件包(转)
- cocos2d接安卓facebook插件(已测cocos-x 3.7 3.8版本)
- 20155314 2016-2017-2 《Java程序设计》实验三 敏捷开发与XP实践
- n人围圈报数,报3出圈
- 《从零开始学Swift》学习笔记(Day 65)——Cocoa Touch设计模式及应用之选择器