JAVA学习-流(stream)相关的API及其使用

概述

Java 8 添加了一个新的抽象概念——(stream),它可以更加高效简洁的处理 集合 中的数据。

关于流的 特点 有:

  1. 不存储元素,根据需求直接进行计算。
  2. 流水线操作,可以在流水线上进行相关操作,流水完成就无法进行任何操作。
  3. 惰性执行,在流中间进行操作时,该操作会被记录,但不会执行,只有在流水完成时才会真正执行。
  4. 内部迭代,不需要自己写迭代的代码。

因为是流是流水线操作,在中间和结束位置都可以操作,所以流的操作分为 中间操作 终结操作。

中间操作:分为 无状态操作有状态操作,中间操作会返回一个新的流,但只有在终结操作之后才会执行(惰性执行)。无状态操作是指对元素的处理不受之前元素的影响,有状态操作是指该操作只有拿到全部的元素才能继续进行

终结操作:分为 非短路操作短路操作,该当该流执行完后,返回最终结果。非短路操作是指必须对所有元素进行处理后才能返回结果,短路操作是指遇到某些指定条件就直接返回结果,类似于 if...return 无需处理后面的元素。

流的相关使用

创建流的方式:

直接创建:

//直接创建流
Stream<Integer> stream01 = Stream.of(1, 1, 4, 5, 1, 4);

通过集合创建:

//创建集合
List<Integer> list = new ArrayList<>();
//通过集合创建流
Stream<Integer> stream02 = list.stream();

流的中间操作:

filter

public abstract Stream<T> filter(java.util.function.Predicate<? super T> predicate)

使用 Predicate 接口,通过指定条件来过滤元素。(下面代码使用了 forEach 来输出,关于 forEach 可以看后面的终结操作)。

//直接创建流
Stream<Integer> stream = Stream.of(1, 1, 4, 5, 1, 4);
//使用filter()方法 筛选大于3的元素
stream.filter(x -> x > 3).forEach(System.out::println);

执行结果:

map

public abstract <R> Stream<R> map(java.util.function.Function<? super T, ? extends R> mapper)

使用 Function 接口,用于映射每个元素对应的结果。

//直接创建流
Stream<Integer> stream = Stream.of(1, 1, 4, 5, 1, 4);
//使用map()方法将集合的元素进行平方
stream.map(x -> x * x).forEach(x -> System.out.print(x + " "));

 执行结果:

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

什巳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值