java8的流處理
阿新 • • 發佈:2019-01-06
java8中的流Stream,可以由array,list等其它的資料結構得到。
在java8中,任何實現了Collection介面的集合類都有個叫stream方法,這個方法可以將該集合下的元素放到流中。
List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
list.add("D");
list.add("E");
Stream<String > stream = list.stream();//將它轉為流
Integer[] myArray = {1, 3, 5};
Stream<Integer> myStream = Arrays.stream(myArray);//將它轉為流
有了流之後,我們就可以將這個流裡面的元素進行各種處理再流到其它地方
首先我們看下流處理中的map方法,這個方法接收一個函式,該函式會處理流中的每個元素,我們一般傳入一個lambda表示式
Integer[] myArray = {1, 3, 5};
Stream<Integer > myStream = Arrays.stream(myArray);//將它轉為流
Stream<Integer> newStream = myStream.map(x->x*2);//每個元素乘以2
newStream.forEach(x->System.out.println(x));//遍歷流中的元素
接下來我們看下流的filter函式,這個函式也是接收一個函式作為引數,一般是lambda函式。該函式必須返回一個boolean值。
Integer[] myArray = {1, 3, 5};
Stream<Integer > myStream = Arrays.stream(myArray);//將它轉為流
Stream<Integer> filterStream = myStream.filter(x->x>4);//只把大於4的流到新的流中
filterStream.forEach(x->System.out.println(x));//j結果是 5
最後我們看看對流的進行最終計算處理的幾個函式。對流的最終處理叫reduce.內建的sum,average和count都是計算函式。
int [] myArray = {1, 3, 5};
int sum = Arrays.stream(myArray).sum();
System.out.println(sum);// 結果:9
當然我們可以用reduce來進行最終計算,這個函式要倆個引數,一個是標記(總結果的初始化狀態),一個是lambda函式
int [] myArray = {1, 3, 5};
int sum = Arrays.stream(myArray).reduce(0, (a,b)->a+b);
System.out.println(sum);// 結果:9
String[] str = { "這是", "拼接", "的", "結果" };
String result = Arrays.stream(str)
.reduce("結果是:", (a,b) -> a + b);
System.out.println(result);