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