List<Integer> numeros = new ArrayList<Integer>(Arrays.asList(1, 2, 3, 4)); // [1, 2, 3, 4]
List<Integer> cuadrados = numeros
.stream()
.map( x -> x * x)
.collect(Collectors.toList());
for (Integer n : cuadrados) {
System.out.println(n);
}
// Imprime el cuadrado de los números de entrada. 4 elementos de entrada, 4 de salida
// 1
// 4
// 9
// 16
平面图()
List<List<Integer>> listaBidimensional = new ArrayList<List<Integer>>(Arrays.asList(
new ArrayList<Integer>(Arrays.asList(1, 2)),
new ArrayList<Integer>(Arrays.asList(3, 4))
));
// [
// [1, 2],
// [3, 4]
// ]
List<Integer> listaAplanada = listaBidimensional
.stream()
.flatMap( listaInterna -> listaInterna.stream())
.collect(Collectors.toList());
for (Integer n : listaAplanada) {
System.out.println(n);
}
// Imprime los números de entrada en una sola lista de 1 dimensión.
// 2 elementos de entrada (2 listas), 4 de salida
// 1
// 2
// 3
// 4
不同之处在于它
map()
返回与输入 Stream 相同数量的元素,因为它只是输入元素的投影。也就是说,每个输入元素都被转换为一个输出元素。另一方面
.flatMap()
,它从每个原始元素中投射出一个元素列表,并将它们连接到一个流中。例如:
地图()
平面图()
嗯,不同的是,.map为每个输入值产生一个输出值,而.flatmap为每个输入值产生从零到 n 个输出值,或多或少如下:
地图::流 T (I -> O) 襟翼地图::流 T (I -> 流 O)
我附上一个示例代码: