Stream流

Stream流

如何获得Stram流

1、通过Collection集合得到Steam流

Collection提供了stream()
在这里插入图片描述
示例:

List<String> list = new ArrayList<>();
list.add("aaa");
list.add("bbb");
list.add("ccc");

// 得到Stream流对象
Stream<String> stream = list.stream();

2、通过Stream.of()得到Steam对象

在这里插入图片描述
示例:

Integer[] arr = new Integer[]{1, 2};
// 这里有两个对象 1,2
Stream<Integer> arr1 = Stream.of(arr);

注意:Stream.of(T… values) 参数应该是对象类型
示例:

// 这里是将int[]作为一个对象来传递的
 int[] arr1 = new int[]{1, 2, 3, 4};
// 里面只有一个对象,就是arr1
 Stream<int[]> arr11 = Stream.of(arr1);

3、Arrays中的stream()创建

在这里插入图片描述

Integer[] arr = new Integer[]{1, 2};
int[] arr1 = new int[]{1, 2, 3, 4};

Stream<Integer> stream2 = Arrays.stream(arr);
IntStream stream3 = Arrays.stream(arr1);

Stream流中的应用

Stream流中的方法包括两大类

  • 中间方法(返回的是Stream流对象)
  • 终结方法(返回的是非流对象)

Stream流的应用(步骤)
获取Stream流->中间方法->结束方法
注意:Stream流只能操作一次

List<String> list = new ArrayList<>();
 list.add("aaa");
 list.add("bbb");
 list.add("ccc");

 // 得到Stream流对象
 Stream<String> stream = list.stream();
 // stream这个流使用过一次,且已经调用了结束方法
 System.out.println(stream.count());
 // 再次使用这个流,将会报错
 System.out.println(stream.count());

重复使用一个流报下面这个错误
在这里插入图片描述

终结方法

count()

返回流中的对象个数
在这里插入图片描述

List<String> list = new ArrayList<>();
list.add("aaa");
list.add("bbb");
list.add("ccc");

// 得到Stream流对象
Stream<String> stream = list.stream();
System.out.println(stream.count()); // 3

int[] arr1 = new int[]{1, 2, 3, 4};
Stream<int[]> arr11 = Stream.of(arr1);
System.out.println(arr11.count()); // 1
forEach()

流中的每个元素执行括号内的方法
在这里插入图片描述
示例:打印流中的每个元素

list.stream().forEach(System.out::println);
reduce()

在这里插入图片描述

Stream<Integer> stream01 = Stream.of(4,3,5,9);
Integer sum = stream01.reduce(0,(a,b)-> a + b);
System.out.println("求和:"+sum);

Stream<Integer> stream01 = Stream.of(4,3,5,9);
Optional<Integer> max= stream01.reduce((x, y)-> x < y ? x : y);
System.out.println("最小值为:"+max.get());

中间方法

distinct()

去除流中重复的元素
在这里插入图片描述

List<String> list = new ArrayList<>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
list.add("aaa");

// 得到Stream流对象
list.stream().forEach(System.out::println);// aaa bbb ccc aaa
list.stream().distinct().forEach(System.out::println);// aaa bbb ccc
filter()

过滤集合中的元素
在这里插入图片描述
示例:过滤大于1的数字,并打印

Integer[] arr = new Integer[]{1, 2};
Stream<Integer> stream1 = Stream.of(arr);
Stream.of(arr).filter(e -> e > 1).forEach(System.out::println);// 2
limit()

取前几个元素
在这里插入图片描述
示例:

List<String> list = new ArrayList<>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
// 去list的前两个元素并打印
list.stream().limit(2).forEach(System.out::println);// aaa bbb
skip()

跳过几个元素
在这里插入图片描述
示例:

List<String> list = new ArrayList<>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
// 跳过前两个元素并打印
list.stream().skip(2).forEach(System.out::println);// ccc
collect()

组合
在这里插入图片描述
示例:

// 将流数据转换为列表类型
List<Integer> collect = Stream.of(arr).collect(Collectors.toList());
System.out.println(collect);

// 分组
List<Student> list1 = new ArrayList<>();
list1.add(new Student("王五", "1"));
list1.add(new Student("张三", "1"));
list1.add(new Student("李四", "1"));
list1.add(new Student("赵柳", "2"));

// 根据年龄进行分组
Map<String, List<Student>> collect1 = list1.stream().collect(Collectors.groupingBy(Student::getClassName));
System.out.println(collect1);

执行结果
在这里插入图片描述

map()

可以将流中的元素映射到另一个流中。即:可以将一种类型的流转换为另一种类型的流
在这里插入图片描述

Stream.of(arr).map(e->(double)e).forEach(System.out::println);
flagMap()

和map类似,map操作是对象类型,flagMap操作的是流对象

List<List<Integer>> lists = new ArrayList<>();
lists.add(Arrays.asList(arr));
lists.stream().flatMap(item->item.stream().filter(e->e>1)).forEach(System.out::println);// 2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值