Stream 流特征和用法

Stream

1.Stream 流概述
Stream 流是Java 8(jdk 1.8)中新增的一个非常强大的API,它可以让我们以一种更加简洁、清晰和高效的方式来操作和处理集合和数组。Stream 流是一种基于集合的高级Sequence函数,它将一个集合或数组转换成一个Stream对象,可以对Stream对象进行各种操作,如筛选、排序、映射等,并且可以利用Stream的方式来进行并行处理,在处理数据的过程中,对于数据原始空间没有任何修改,不影响原始数据。
2.Stream 流的操作方式
2.1通过集合对象创建
ArrayList<String> list = new ArrayList<>();
list.stream()
2.2 通过数组创建
int[] arr = {1,2,3,4,5};
Arrays.stream(arr)
3. Stream 流相关方法
有了 Stream 对象就可以进行各种操作,Stream 流的操作可以分为中间操作和终止操作
3.1 Stream 流处理数据的中间方法
常用的中间操作包括skip、limit、sorted、filter、distinct等。
Strea<T> skip(long n);
	限制跳过当前 Stream 流对应元素的个数,【掐头】
    list.stream()
        .skip(2)
        .forEach(System.out::println);
Stream<T> limit(long n);
	限制当前 Stream 流对应的元素总个数,【去尾】
    list.stream()
        .limit(5)
        .forEach(System.out::println);
Stream<T> sorted();
	对当前 Stream 流存储的数据进行排序操作,要求元素有自然顺序或者遵从 Comparable 接口,默认为【升序】
    排序方法局限性很大,只能用于已经有自然顺序或者遵从 Comparable 接口的数据类型。
   list.stream()
        .sorted()
        .forEach(System.out::println);
Stream<T> sorted(Comparator<? super T> com);
	对当前 Stream 流的数据进行排序操作,排序规则由 Comparator 函数式接口规范
     list.stream()
        .sorted((p1,p2)-> p2.getAge() - p1.getAge())
        .forEach(System.out::println);
Stream<T> filter(Predicate<? super T> pre);
	判断过滤当前 Stream 流可以保存的数据条件,满足条件保留,不满足条件的数据移除,过滤规则由 Predicate 接口约束。
    list.stream()
        .filter(s->s.length > 2)
        .forEach(System.out::println);
Stream<T> distinct();
	当前 Stream 流中对应的所有元素进行去重操作
    list.stream()
        .distinct()
        .forEach(System.out::println);
Stream<R> map(Function<R,T> fun);
	当前 Stream 存储的数据转换为 Function 函数式接口要求的返回值类型,完成类型转换操作。
    Stream<Person> stream = list.stream();
	Stream<String> stringStream = stream.map(s -> 		s.toString());
	stringStream.forEach(System.out::println);
3.2 Stream 流处理数据终止方法
常用的终止方法有 count、forEach、collect、toArray 等,当Stream 流执行终止方法后,Stream 流自动关闭,对应的 Stream 占用的资源空间会被 JVM 收回。
long count();
	返回当前 Stream 流对应的数据元素的个数,为终止方法
    Stream<String> stream = list.stream();
	long count = stream
        .skip(2)
        .limit(5)
        .count();
void forEach(Consumer<? super T> con);
	针对于当前 Stream 存储元素的处置方法,为终止方法。
    list.stream()
        .skip(2)
        .forEach(System.out::println);
<R, A> R collect(Collector<? super T, A, R collector);
	Stream 流对应的元素存储内容,转换为用户要求的集合对象。为终止方法。
        常用:
        	Collectors.toList() 目标存储集合类型为 List 集合
        	Collectors.toSet() 目标存储集合类型为 Set 集合
    // Stream 流数据转换为 List 集合
	list<String> list1 = list.stream()
        				.distinct()
        				.collect(Collectors.toList());
	// Stream 流数据转换为 Set 集合
	Set<String> set = list.stream()
        				.collect(Collectors.toSet());
Object[] toArray();
	Stream 流存储的元素内容转换为 Object 类型数组返回
    Object[] arr = num.stream().toArray();
4. Stream 流的优点
1. 高效性:Stream 流的并行处理可以让我们更好的利用 CPU 多核的特性,提高处理速度
2. 代码简洁:Stream 流的 API 提供了丰富的操作,使我们的代码更加简洁、易于阅读和维护
3. 可读性和可维护性:Stream 流的代码可以被拆分为多个子任务,容易实现并行化,从而使代码更加可读、可维护。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值