一、StreamAPI实例化
/**
* 通过集合创建Stream流
*/
@Test
public 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流
*/
@Test
public void test2(){
//返回一个流
Integer[] arr = {1,2,3,4};
Stream<Integer> stream = Arrays.stream(arr);
}
/**
* 通过of()创建Stream流
*/
@Test
public void test3(){
Stream<String> stream = Stream.of("aa", "bb", "cc", "dd");
}
二、StreamAPI中间操作
/**
* 筛选与切片
*/
@Test
public 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);
}
/**
* 映射
*/
@Test
public void test5(){
//map() --- 接收一个函数作为参数
List<String> list = Arrays.asList("aa", "bb", "cc");
list.stream().map(str -> str.toUpperCase()).forEach(System.out :: println);
}
/**
* 排序
*/
@Test
public 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);
}
三、终止操作
@Test
public 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);
});
}