建行官网网站,广告设计工作室,怎么做网站zwnet,相册网站源码phpjava中map是把集合每个元素重新映射#xff0c;元素个数不变#xff0c;但是元素值发生了变化。而flatMap从字面上来说是压平这个映射#xff0c;实际作用就是将每个元素进行一个一对多的拆分#xff0c;细分成更小的单元#xff0c;返回一个新的Stream流#xff0c;新的… java中map是把集合每个元素重新映射元素个数不变但是元素值发生了变化。而flatMap从字面上来说是压平这个映射实际作用就是将每个元素进行一个一对多的拆分细分成更小的单元返回一个新的Stream流新的流元素个数增加。 java官方给出的示例如下
# 按行读取文件内容
StreamString lines Files.lines(path);
# 将每一行文字按照空格拆分为单词
StreamString words lines.flatMap(line - Stream.of(line.split( ))); 如下所示的文本
hello world
this is a test txt
done 经过这个转换得到的结果如下
[hello, world, this, is, a, test, txt, done] 我们大概知道flatMap压平的作用就是把原来的三行字符串文字变为了一个流流数组中每个元素是单词。 我们假设有这样的需求有一个[[1,3],[2,4]]的二维数组我们要得到一个一维数组[1,3,2,4]。那么这里的flatMap就正好排上用场原来是二维的现在压平为一维正好分解了。
ListInteger lista new ArrayList();
lista.add(1);
lista.add(3);ListInteger listb new ArrayList();
listb.add(2);
listb.add(4);
ListListInteger listc new ArrayList();
listc.add(lista);
listc.add(listb);
System.out.println(listc);
ListInteger listd listc.stream().flatMap(ele - ele.stream()).collect(Collectors.toList());
System.out.println(listd); 运行程序打印信息如下
[[1, 3], [2, 4]]
[1, 3, 2, 4] flatMap里面需要传入一个Function参数这里根据需要将数组转为stream。其实可以直接传入一个函数名:Collection::stream效果是一样的。 完整代码如下
package org.example;import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;public class FlatMapExample {public static void main(String[] args) {ListInteger lista new ArrayList();lista.add(1);lista.add(3);ListInteger listb new ArrayList();listb.add(2);listb.add(4);ListListInteger listc new ArrayList();listc.add(lista);listc.add(listb);System.out.println(listc);ListInteger listd listc.stream().flatMap(Collection::stream).collect(Collectors.toList());System.out.println(listd);try {StreamString stream Files.lines(Paths.get(test.txt));// stream.forEach(System.out::println);ListString words stream.flatMap(line - Stream.of(line.split( ))).collect(Collectors.toList());System.out.println(words);} catch (IOException e) {throw new RuntimeException(e);}}
}运行截图 Stream对象经过一次操作之后内容就会被清除同时流也被关闭。如果还进行第二次其他操作那么就会报错 stream has already been operated upon or closed 所以进行流操作一般都是把所有的流程都以链式写法写在一起最后得到结果。