Java 8 新特性之 Stream 流基礎體驗

 

Java 8 新特性之 Stream 流基礎體驗

 

package com.company;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.function.Predicate;
import java.util.stream.Stream;

public class Main {
    public static void main(String[] args) {
        learnStream();
    }

    public static void emptyLine(){System.out.println();System.out.println();}

    public static void learnStream() {

        ////首先,建立一個1-6亂序的List
        List<Integer> lists = new ArrayList<>();
        lists.add(4);
        lists.add(3);
        lists.add(6);
        lists.add(1);
        lists.add(5);
        lists.add(2);

        //遍歷list
        System.out.print("lists數據:");
        for (Integer elem : lists) {
            System.out.print(elem + ",");
        }

        emptyLine();

        //獲取list中的最小值
        System.out.print("list中的最小值:");
        Stream<Integer> stream = lists.stream();
        Optional<Integer> min = stream.min(Integer::compareTo);
        if (min.isPresent()) {
            System.out.println(min.get());
        }

        emptyLine();

        //獲取list中的最大值
        System.out.print("list中的最大值:");
        lists.stream().max(Integer::compareTo).ifPresent(System.out::println);

        emptyLine();

        //排序
        System.out.print("排序:");
        Stream<Integer> sorted = lists.stream().sorted();
        sorted.forEach(elem -> System.out.print(elem + ","));

        emptyLine();

        //過濾
        System.out.print("過濾list,只留下大於3的元素:");
        lists.stream().filter(elem -> elem > 3).forEach(elem -> System.out.print(elem + ","));

        emptyLine();

        //過濾
        System.out.print("過濾list,只留下大於0而且小於4的元素:");
        lists.stream().filter(elem -> elem > 0).filter(elem -> elem < 4).forEach(elem -> System.out.print(elem + ","));
        emptyLine();
        System.out.print("過濾list,只留下大於0而且小於4的元素,並排序:");
        lists.stream().filter(elem -> elem > 0).filter(elem -> elem < 4).sorted(Integer::compareTo).forEach(elem -> System.out.print(elem + ","));

        emptyLine();


        //自定義過濾
        Predicate<Integer> elme1 =(param) -> (param>0);
        Predicate<Integer> elme2 =(param) -> (param<4);
        System.out.print("過濾list,只留下大於0而且小於4的元素,並排序:(使用自定義過濾)");
        lists.stream().filter(elme1).filter(elme2).sorted(Integer::compareTo).forEach(elem -> System.out.print(elem + ","));

        emptyLine();

        //通過了前面的這麼多流操做,咱們再來看看List裏面的值有沒有發生什麼改變
        //遍歷list
        System.out.print("原來lists數據:");
        for (Integer elem : lists) {
            System.out.print(elem + ",");
        }

    }
}

 

結果java

  Optional可謂是NullPointException的大殺器啊api

 

  Stream能夠只經過一行代碼就實現多線程的並行計算。多線程

 

中間操做包括:map (mapToInt, flatMap 等)、 filter、distinct、sorted、peek、limit、skip、parallel、sequential、unordered。spa

終止操做包括:forEach、forEachOrdered、toArray、reduce、collect、min、max、count、anyMatch、allMatch、noneMatch、findFirst、findAny、iterator。線程

關於Stream的每一個方法如何使用就不展開了,更詳盡的介紹看這篇文章:https://www.ibm.com/developerworks/cn/java/j-lo-java8streamapi/code

相關文章
相關標籤/搜索