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

概述

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

关于流的 特点 有:

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

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

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

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

流的相关使用

创建流的方式:

直接创建:

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

通过集合创建:

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

流的中间操作:

filter

public abstract Stream filter(java.util.function.Predicate predicate)

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

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

执行结果:

map

public abstract Stream map(java.util.function.Function mapper)

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

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

 执行结果:

你可能感兴趣的:(Java学习,java,开发语言,后端,stream,api)