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 + ","); } } }
结果
Optional可谓是NullPointException的大杀器啊
Stream可以只通过一行代码就实现多线程的并行计算。
中间操作包括:map (mapToInt, flatMap 等)、 filter、distinct、sorted、peek、limit、skip、parallel、sequential、unordered。
终止操作包括: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/
请留下你的足迹...