Eg:将Stream集合中的语句进行单词拆分,然后去重Stream
map方法是将指定的Stream中元素进行“平级”处理,每个元素转化为各自所对应的一个Stream集合,输入与输出是一对一的关系,若进一步获取各个子Stream中的元素,还需要逐个遍历子集合
得到的Stream中的元素与原Stream中的元素是“父子关系”
Eg:将下面String Stream中的字符串通过空格Split获取单次,并对所有单词去重
Stream
(1)通过Map方法:testStream.map(str-> Arrays.stream(str.split(" ")))
得到的将是四个数组:
java.util.stream.ReferencePipeline$Head@816f27d
java.util.stream.ReferencePipeline$Head@87aac27
java.util.stream.ReferencePipeline$Head@3e3abc88
java.util.stream.ReferencePipeline$Head@6ce253f1
(2)第一个总的集合List
List
(3)要遍历切割完成数组里的所有的单词,需要再逐个遍历其中数组,将所有子集合中的元素合并到一个集合中,也就是要进行切割并获取所有单词的总集合,需要对Map需要进行两层遍历:
testStream.map(str-> Arrays.stream(str.split(" "))).forEach(strStream->strStream.forEach(s->totalList.add(s)));
(4)再次遍历totalList
totalList.stream().distinct().forEach(System.out::println);
flatMap将原有Stream中的元素进行转化为新的子Stream集合,同时对子Stream中的元素进行“跨级”处理,原有的Stream通过一次flatMap之后得到的不是各个子Stream的集合,
而是各个子Steam集合中的元素的总集合,也就是对各个子Stream结合进行二次遍历取出中的元素,融合到一个总集合中
得到的Stream中的元素与原Stream中的元素是“祖孙关系”
Eg:将下面String Stream中的字符串通过空格Split获取单次,并对所有单词去重
Stream
(1)通过flatMap方法:testStream.flatMap(str-> Arrays.stream(str.split(" ")))
得到的将是一堆单词的集合:直接将各个子Stream中的元素flat到一起,所有的元素拥有同一个“祖父”
Stream【hello,welcome,world,hello,hello,world,hello,world,welcome】
(2)直接对新得到的Stream去重即可
testStream.flatMap(str-> Arrays.stream(str.split(" "))).distinct().forEach(System.out::println);