1. 程式人生 > >java8的流處理

java8的流處理

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);