【发布时间】:2020-04-12 07:58:42
【问题描述】:
这是一个代码示例(来自 Mykong.com):
String[][] data = new String[][]{{"a", "b"}, {"c", "d"}, {"e", "f"}};
//Stream<String[]>
Stream<String[]> temp = Arrays.stream(data);
//Stream<String>, GOOD!
Stream<String> stringStream = temp.flatMap(x -> Arrays.stream(x));
如果我理解正确,这里的 lambda 正在执行实际的展平,但 flatMap 无法理解需要进行什么展平以便可以省略 lambda?
编辑:flatMap 是否可以有一个默认的 lambda 用于以“直观”的方式进行转换?
【问题讨论】:
-
flatmap 正在展平字符串数组流
-
不,它不能。这对你来说很明显,因为这个特定的 Stream 是 String[] 的 Stream,你无法想象任何其他方式将其转换为 Stream。但也许有人会想从数组的末尾而不是开头来转换它。如果它是一个 Stream
呢?没有参数的 flatMap() 方法如何将 Car 转换为 Stream? Stream 对它的元素的所有了解就是它们是对象。 -
lambda here is doing the actual flattening不,这里的 lamda 将数组转换为流 -
@JBNizet:不是数组/列表的对象流如何被 flatMap 展平? flatMap 会接受数组数组或列表数组或列表列表等以外的其他内容吗?
-
当然:
streamOfCars.flatMap(car -> car.getPassengers().stream())