java8之資料流Stream的Map和flatMap的區別
阿新 • • 發佈:2019-01-01
package com.lyzx.day03;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;
import org.junit.Test;
/**
* 複習一下Map和flatMap
* 關於Map和flatMap的區別
*/
public class T1 {
private static List<String> words = Arrays.asList("hello world",
"hello java" ,
"hello hello");
private static List<String> wordList = Arrays.asList("aa","bb","cc");
@Test
public void test1(){
words.stream()
//對words的每一項都做切割操作,把每一個字串都轉換為陣列
//執行完後資料結構如下{["hello","world"],["hello" ,"java"],["hello","hello"]}
.map(item -> item.split(" "))
//對每個陣列做單獨的遍歷操作
.forEach(arr->{
for(String item : arr){
System.out.println(item);
}
});
}
@Test
public void test2(){
words.stream()
// 把每一項轉化為陣列包含列表的Stream流
//然後這個函式把所有的List裡面的字串都取出來放在了一個集合中,這個集合做下一次執行的資料來源
//{"hello","world","hello","java","hello","hello"}
.flatMap(item->{
String[] arr = item.split(" ");
return Arrays.asList(arr).stream();
})
//根據每一項的HashCode和equals方法做去重操作
.distinct()
//列印每一項
.forEach(item->System.out.println(item));
}
@Test
public void test3(){
wordList.stream()
//把T1的getCharacter方法應用於wordList的每一項,wordList每一項都是String
//getCharacter方法的引數也是String,符合函式式介面
//通過map方法就把wordList的每一項都轉換為了存放單個字元(以字串的形式存放)列表的Stream流即Stream<List<String>>
.map(T1::getCharacter)
//對轉換後的每一項(List)分別做遍歷操作
.forEach(sm->{
sm.forEach(System.out::println);
});
}
@Test
public void test4(){
wordList.stream()
.flatMap(T1::getCharacter)
.distinct()
.forEach(System.out::println);
}
public static Stream<String> getCharacter(String str){
char[] array = str.toCharArray();
List<String> list = new ArrayList<String>();
for(char item : array){
list.add(String.valueOf(item));
}
Stream<String> stream = list.stream();
return stream;
}
}
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;
import org.junit.Test;
/**
* 複習一下Map和flatMap
* 關於Map和flatMap的區別
*/
public class T1 {
private static List<String> words = Arrays.asList("hello world",
"hello java"
"hello hello");
private static List<String> wordList = Arrays.asList("aa","bb","cc");
@Test
public void test1(){
words.stream()
//對words的每一項都做切割操作,把每一個字串都轉換為陣列
//執行完後資料結構如下{["hello","world"],["hello"
.map(item -> item.split(" "))
//對每個陣列做單獨的遍歷操作
.forEach(arr->{
for(String item : arr){
System.out.println(item);
}
});
}
@Test
public void test2(){
words.stream()
//
//然後這個函式把所有的List裡面的字串都取出來放在了一個集合中,這個集合做下一次執行的資料來源
//{"hello","world","hello","java","hello","hello"}
.flatMap(item->{
String[] arr = item.split(" ");
return Arrays.asList(arr).stream();
})
//根據每一項的HashCode和equals方法做去重操作
.distinct()
//列印每一項
.forEach(item->System.out.println(item));
}
@Test
public void test3(){
wordList.stream()
//把T1的getCharacter方法應用於wordList的每一項,wordList每一項都是String
//getCharacter方法的引數也是String,符合函式式介面
//通過map方法就把wordList的每一項都轉換為了存放單個字元(以字串的形式存放)列表的Stream流即Stream<List<String>>
.map(T1::getCharacter)
//對轉換後的每一項(List)分別做遍歷操作
.forEach(sm->{
sm.forEach(System.out::println);
});
}
@Test
public void test4(){
wordList.stream()
.flatMap(T1::getCharacter)
.distinct()
.forEach(System.out::println);
}
public static Stream<String> getCharacter(String str){
char[] array = str.toCharArray();
List<String> list = new ArrayList<String>();
for(char item : array){
list.add(String.valueOf(item));
}
Stream<String> stream = list.stream();
return stream;
}
}