一、StreamAPI实例化
/*** 通过集合创建Stream流*/@Testpublic void test1(){ArrayList<Integer> arrayList = new ArrayList<>();//返回一个顺序流Stream<Integer> stream = arrayList.stream();//返回一个并行流Stream<Integer> integerStream = arrayList.parallelStream();System.out.println(stream);System.out.println(integerStream);}/*** 通过数组创建Stream流*/@Testpublic void test2(){//返回一个流Integer[] arr = {1,2,3,4};Stream<Integer> stream = Arrays.stream(arr);}/*** 通过of()创建Stream流*/@Testpublic void test3(){Stream<String> stream = Stream.of("aa", "bb", "cc", "dd");}
二、StreamAPI中间操作
/*** 筛选与切片*/@Testpublic void test4(){//接收lambda从流中排除某些元素ArrayList<Integer> arrayList = new ArrayList<>();for (int i = 1; i <= 10 ; i++) {arrayList.add(i);}//filter()过滤操作arrayList.stream().filter(integer -> integer > 5).forEach(System.out :: println);//limit() --- 截断流,使其元素不超过给定数量arrayList.stream().limit(2).forEach(System.out :: println);//skip() --- 跳过元素,返回一个扔掉了前n个元素arrayList.stream().skip(5).forEach(System.out :: println);//distinct() --- 筛选,通过流所生成元素的hashCode() 和 equals() 去除重复元素arrayList.add(5);arrayList.add(6);arrayList.add(8);arrayList.stream().distinct().forEach(System.out :: println);}/*** 映射*/@Testpublic void test5(){//map() --- 接收一个函数作为参数List<String> list = Arrays.asList("aa", "bb", "cc");list.stream().map(str -> str.toUpperCase()).forEach(System.out :: println);}/*** 排序*/@Testpublic void test6(){//sorted() --- 自然排序List<Integer> list = Arrays.asList(12, 23, 1, 56, 23);list.stream().sorted().forEach(System.out :: println);//定制排序list.stream().sorted((o1, o2) -> o1 - o2).forEach(System.out :: println);}
三、终止操作
@Testpublic void test7(){//allMatch() --- 检查所有元素是否匹配List<Integer> list = Arrays.asList(12, 34, 1, 45);System.out.println(list.stream().allMatch(Integer -> Integer > 12));//anyMatch() --- 检查是否至少匹配一个元素System.out.println(list.stream().anyMatch(Integer -> Integer > 23));//findFirst() --- 返回第一个元素System.out.println(list.stream().findFirst().get());//count() --- 返回流中元素的总个数System.out.println(list.stream().count());//max() --- 返回流中最大值System.out.println(list.stream().max((o1, o2) -> Integer.compare(o1, o2)).get());//min() --- 返回流中最小值System.out.println(list.stream().min((o1, o2) -> Integer.compare(o1, o2)).get());//forEach() --- 遍历集合list.forEach(integer -> {System.out.println(integer);});//reduce() --- 将流中元素反复结合起来,得到一个值System.out.println(list.stream().reduce(0, (o1, o2) -> o1 + o2));//List<Integer> collect = list.stream().filter(Integer -> Integer > 23).collect(Collectors.toList());collect.forEach(a ->{System.out.println(a);});}