Eg:將Stream集合中的語(yǔ)句進(jìn)行單詞拆分,然后去重Stream<String>testStream= Stream.of("hello welcome","world hello","hello world","hello world welcome");
map方法是將指定的Stream中元素進(jìn)行“平級(jí)”處理先口,每個(gè)元素轉(zhuǎn)化為各自所對(duì)應(yīng)的一個(gè)Stream集合椭盏,輸入與輸出是一對(duì)一的關(guān)系,若進(jìn)一步獲取各個(gè)子Stream中的元素司倚,還需要逐個(gè)遍歷子集合
得到的Stream中的元素與原Stream中的元素是“父子關(guān)系”
Eg:將下面String Stream中的字符串通過(guò)空格Split獲取單次究流,并對(duì)所有單詞去重
Stream<String>testStream= Stream.of("hello welcome","world hello","hello world","hello world welcome");
(1)通過(guò)Map方法:testStream.map(str-> Arrays.stream(str.split(" ")))
得到的將是四個(gè)數(shù)組:
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)第一個(gè)總的集合List
?? ?List<String>totalList=newArrayList<String>();
(3)要遍歷切割完成數(shù)組里的所有的單詞,需要再逐個(gè)遍歷其中數(shù)組寝殴,將所有子集合中的元素合并到一個(gè)集合中,也就是要進(jìn)行切割并獲取所有單詞的總集合明垢,需要對(duì)Map需要進(jìn)行兩層遍歷:
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中的元素進(jìn)行轉(zhuǎn)化為新的子Stream集合蚣常,同時(shí)對(duì)子Stream中的元素進(jìn)行“跨級(jí)”處理,原有的Stream通過(guò)一次flatMap之后得到的不是各個(gè)子Stream的集合痊银,
而是各個(gè)子Steam集合中的元素的總集合抵蚊,也就是對(duì)各個(gè)子Stream結(jié)合進(jìn)行二次遍歷取出中的元素,融合到一個(gè)總集合中
得到的Stream中的元素與原Stream中的元素是“祖孫關(guān)系”
Eg:將下面String Stream中的字符串通過(guò)空格Split獲取單次溯革,并對(duì)所有單詞去重
Stream<String>testStream= Stream.of("hello welcome","world hello","hello world","hello world welcome");
(1)通過(guò)flatMap方法:testStream.flatMap(str-> Arrays.stream(str.split(" ")))
得到的將是一堆單詞的集合:直接將各個(gè)子Stream中的元素flat到一起贞绳,所有的元素?fù)碛型粋€(gè)“祖父”
Stream【hello,welcome,world,hello,hello,world,hello,world,welcome】
(2)直接對(duì)新得到的Stream去重即可
testStream.flatMap(str-> Arrays.stream(str.split(" "))).distinct().forEach(System.out::println);