stream流
时间:2021-08-19
本文章向大家介绍stream流,主要包括stream流使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
stream概述
Java8是所有版本中热度最高的几个之一,其中引入了stream流,Optional等特性。
接口
接口 | 描述 | |
---|---|---|
BaseStream<T,S extends BaseStream<T,S>> | 流的基本接口,流是支持顺序和并行聚合操作的元素序列。 | |
Collector<T,A,R> | 将输入元素累积到可变结果容器中的可变归约操作,可选择在处理完所有输入元素后将累积结果转换为最终表示。 | --- |
DoubleStream | 支持顺序和并行聚合操作的原始双值元素序列。 | |
DoubleStream.Builder | 一个可变构建器DoubleStream。 | |
IntStream | 支持顺序和并行聚合操作的原始整数值元素序列。 | |
IntStream.Builder | 可变构建器IntStream。 | |
LongStream | 支持顺序和并行聚合操作的原始长值元素序列。 | |
LongStream.Builder | 可变构建器LongStream。 | |
Stream< T> | 支持顺序和并行聚合操作的元素序列。 | |
Stream.Builder< T> | 可变构建器Stream。 |
特点
1、没有存储。流不是存储元素的数据结构;相反,它通过计算操作的管道传送来自数据结构、数组、生成器函数或 I/O 通道等源的元素。
2、功能性。对流的操作会产生结果,但不会修改其源。例如,过滤Stream 从集合中获得的 a 会生成一个Stream没有过滤元素的新元素,而不是从源集合中删除元素。
3、懒惰寻求。许多流操作,例如过滤、映射或重复删除,可以懒惰地实现,从而暴露优化机会。例如,“找到String具有三个连续元音的第一个”不需要检查所有输入字符串。流操作分为中间(Stream生产)操作和终端(价值或副作用生产)操作。中间操作总是懒惰的。
4、可能无界。虽然集合具有有限的大小,但流不需要。诸如limit(n)或 之 类的短路操作findFirst()可以允许在有限时间内完成对无限流的计算。
5、消耗品。流的元素在流的生命周期内仅被访问一次。与 一样Iterator,必须生成新的流以重新访问源的相同元素。
stream操作类型
方法
所有静态方法
修饰符和类型 | 方法 | 说明 |
---|---|---|
static < T>Stream.Builder< T> | builder() | 返回 a 的构建器Stream。 |
static < T> Stream< T> | concat(Stream<? extends T> a, Stream<? extends T> b) | 创建一个延迟连接的流,其元素是第一个流的所有元素,后跟第二个流的所有元素。 |
static < T> Stream< T> | empty() | 返回一个空的序列Stream。 |
static < T> Stream< T> | generate(Supplier< T> s) | 返回一个无限连续的无序流,其中每个元素都由提供的 生成Supplier。 |
static < T> Stream< T> | iterate(T seed, UnaryOperator< T> f) | 返回一个无限连续有序Stream通过函数的迭代应用产生f为初始元素seed,产生Stream包括seed,f(seed), f(f(seed)),等。 |
static < T> Stream< T> | of(T... values) | 返回其元素为指定值的顺序有序流。 |
static < T> Stream< T> | of(T t) | 返回一个Stream包含单个元素的序列。 |
实例方法
修饰符和类型 | 方法 | 说明 |
---|---|---|
boolean | allMatch(Predicate<? super T> predicate) | 返回此流的所有元素是否与提供的谓词匹配。 |
boolean | anyMatch(Predicate<? super T> predicate) | 返回此流的任何元素是否与提供的谓词匹配。 |
<R,A> R | collect(Collector<? super T,A,R> collector) | 使用 对该流的元素执行可变归约操作 Collector。 |
< R> R | collect(Supplier< R> supplier, BiConsumer<R,? super T> accumulator, BiConsumer<R,R> combiner) | 对此流的元素执行可变的归约操作。 |
long | count() | 返回此流中元素的计数。 |
Stream< T> | distinct() | 返回由该流的不同元素(根据 Object.equals(Object))组成的流。 |
Stream< T> | filter(Predicate<? super T> predicate) | 返回由与给定谓词匹配的此流的元素组成的流。 |
Optional< T> | findAny() | 返回一个Optional描述流的某个元素的值,Optional如果流为空,则返回一个空值。 |
Optional< T> | findFirst() | 返回一个Optional描述此流的第一个元素的值,Optional如果流为空,则返回一个空值。 |
< R> Stream< R> | flatMap(Function<? super T,? extends Stream<? extends R>> mapper) | 返回一个流,该流由通过将提供的映射函数应用于每个元素而生成的映射流的内容替换此流的每个元素的结果组成。 |
DoubleStream | flatMapToDouble(Function<? super T,? extends DoubleStream> mapper) | 返回一个DoubleStream包含用映射流的内容替换此流的每个元素的结果,该映射流是通过将提供的映射函数应用于每个元素而产生的。 |
IntStream | flatMapToInt(Function<? super T,? extends IntStream> mapper) | 返回一个IntStream包含用映射流的内容替换此流的每个元素的结果,该映射流是通过将提供的映射函数应用于每个元素而产生的。 |
LongStream | flatMapToLong(Function<? super T,? extends LongStream> mapper) | 返回一个LongStream包含用映射流的内容替换此流的每个元素的结果,该映射流是通过将提供的映射函数应用于每个元素而产生的。 |
void | forEach(Consumer<? super T> action) | 对此流的每个元素执行一个操作。 |
void | forEachOrdered(Consumer<? super T> action) | 如果流具有定义的遇到顺序,则按流的遇到顺序对此流的每个元素执行操作。 |
Stream< T> | limit(long maxSize) | 返回由该流的元素组成的流,被截断为maxSize长度不超过。 |
< R> Stream< R> | map(Function<? super T,? extends R> mapper) | 返回由将给定函数应用于此流的元素的结果组成的流。 |
DoubleStream | mapToDouble(ToDoubleFunction<? super T> mapper) | 返回DoubleStream由将给定函数应用于此流的元素的结果组成。 |
IntStream | mapToInt(ToIntFunction<? super T> mapper) | 返回一个IntStream由将给定函数应用于此流的元素的结果组成。 |
LongStream | mapToLong(ToLongFunction<? super T> mapper) | 返回LongStream由将给定函数应用于此流的元素的结果组成。 |
Optional< T> | max(Comparator<? super T> comparator) | 根据提供的 返回此流的最大元素 Comparator。 |
Optional< T> | min(Comparator<? super T> comparator) | 根据提供的 返回此流的最小元素 Comparator。 |
boolean | noneMatch(Predicate<? super T> predicate) | 返回此流的元素是否与提供的谓词匹配。 |
Stream< T> | peek(Consumer<? super T> action) | 返回一个由该流的元素组成的流,另外在每个元素上执行提供的操作,因为元素从结果流中被消耗。 |
Optional< T> | reduce(BinaryOperator |
使用关联累积函数对此流的元素 执行缩减,并返回描述缩减的值(如果有)。Optional |
T | reduce(T identity, BinaryOperator |
使用提供的标识值和关联 累积函数对该流的元素 执行归约,并返回归约后的值。 |
< U> U | reduce(U identity, BiFunction<U,? super T,U> accumulator, BinaryOperator combiner) | 使用提供的标识、累积和组合函数对该流的元素执行归约。 |
Stream< T> | skip(long n) | 丢弃流的第一个n元素后,返回由该流的其余元素组成的流。 |
Stream< T> | sorted() | 返回由该流的元素组成的流,按自然顺序排序。 |
Stream< T> | sorted(Comparator<? super T> comparator) | 返回由该流的元素组成的流,根据提供的 进行排序Comparator。 |
Object[] | toArray() | 返回一个包含此流元素的数组。 |
< A> A[] | toArray(IntFunction<A[]> generator) | 返回一个包含此流元素的数组,使用提供的generator函数分配返回的数组,以及分区执行或调整大小可能需要的任何其他数组。 |
抽象方法
修饰符和类型 | 方法 | 说明 |
---|---|---|
boolean | allMatch(Predicate<? super T> predicate) | 返回此流的所有元素是否与提供的谓词匹配。 |
boolean | anyMatch(Predicate<? super T> predicate) | 返回此流的任何元素是否与提供的谓词匹配。 |
<R,A> R | collect(Collector<? super T,A,R> collector) | 使用 对该流的元素执行可变归约操作 Collector。 |
< R> R | collect(Supplier< R> supplier, BiConsumer<R,? super T> accumulator, BiConsumer<R,R> combiner) | 对此流的元素执行可变的归约操作。 |
long | count() | 返回此流中元素的计数。 |
Stream< T> | distinct() | 返回由该流的不同元素(根据 Object.equals(Object))组成的流。 |
Stream< T> | filter(Predicate<? super T> predicate) | 返回由与给定谓词匹配的此流的元素组成的流。 |
Optional< T> | findAny() | 返回一个Optional描述流的某个元素的值,Optional如果流为空,则返回一个空值。 |
Optional< T> | findFirst() | 返回一个Optional描述此流的第一个元素的值,Optional如果流为空,则返回一个空值。 |
< R> Stream< R> | flatMap(Function<? super T,? extends Stream<? extends R>> mapper) | 返回一个流,该流由通过将提供的映射函数应用于每个元素而生成的映射流的内容替换此流的每个元素的结果组成。 |
DoubleStream | flatMapToDouble(Function<? super T,? extends DoubleStream> mapper) | 返回一个DoubleStream包含用映射流的内容替换此流的每个元素的结果,该映射流是通过将提供的映射函数应用于每个元素而产生的。 |
IntStream | flatMapToInt(Function<? super T,? extends IntStream> mapper) | 返回一个IntStream包含用映射流的内容替换此流的每个元素的结果,该映射流是通过将提供的映射函数应用于每个元素而产生的。 |
LongStream | flatMapToLong(Function<? super T,? extends LongStream> mapper) | 返回一个LongStream包含用映射流的内容替换此流的每个元素的结果,该映射流是通过将提供的映射函数应用于每个元素而产生的。 |
void | forEach(Consumer<? super T> action) | 对此流的每个元素执行一个操作。 |
void | forEachOrdered(Consumer<? super T> action) | 如果流具有定义的遇到顺序,则按流的遇到顺序对此流的每个元素执行操作。 |
Stream< T> | limit(long maxSize) | 返回由该流的元素组成的流,被截断为maxSize长度不超过。 |
< R> Stream< R> | map(Function<? super T,? extends R> mapper) | 返回由将给定函数应用于此流的元素的结果组成的流。 |
DoubleStream | mapToDouble(ToDoubleFunction<? super T> mapper) | 返回DoubleStream由将给定函数应用于此流的元素的结果组成。 |
IntStream | mapToInt(ToIntFunction<? super T> mapper) | 返回一个IntStream由将给定函数应用于此流的元素的结果组成。 |
LongStream | mapToLong(ToLongFunction<? super T> mapper) | 返回LongStream由将给定函数应用于此流的元素的结果组成。 |
Optional< T> | max(Comparator<? super T> comparator) | 根据提供的 返回此流的最大元素 Comparator。 |
Optional< T> | min(Comparator<? super T> comparator) | 根据提供的 返回此流的最小元素 Comparator。 |
boolean | noneMatch(Predicate<? super T> predicate) | 返回此流的元素是否与提供的谓词匹配。 |
Stream< T> | peek(Consumer<? super T> action) | 返回一个由该流的元素组成的流,另外在每个元素上执行提供的操作,因为元素从结果流中被消耗。 |
Optional< T> | reduce(BinaryOperator |
使用关联累积函数对此流的元素 执行缩减,并返回描述缩减的值(如果有)。Optional |
T | reduce(T identity, BinaryOperator |
使用提供的标识值和关联 累积函数对该流的元素 执行归约,并返回归约后的值。 |
< U> U | reduce(U identity, BiFunction<U,? super T,U> accumulator, BinaryOperator combiner) | 使用提供的标识、累积和组合函数对该流的元素执行归约。 |
Stream< T> | skip(long n) | 丢弃流的第一个n元素后,返回由该流的其余元素组成的流。 |
Stream< T> | sorted() | 返回由该流的元素组成的流,按自然顺序排序。 |
Stream |
sorted(Comparator<? super T> comparator) | 返回由该流的元素组成的流,根据提供的 进行排序Comparator。 |
Object[] | toArray() | 返回一个包含此流元素的数组。 |
< A> A[] | toArray(IntFunction<A[]> generator) | 返回一个包含此流元素的数组,使用提供的generator函数分配返回的数组,以及分区执行或调整大小可能需要的任何其他数组。 |
默认方法
修饰符和类型 | 方法 | 说明 |
---|---|---|
static < T> Stream.Builder< T> | builder() | 返回 a 的构建器Stream。 |
static < T> Stream< T> | concat(Stream<? extends T> a, Stream<? extends T> b) | 创建一个延迟连接的流,其元素是第一个流的所有元素,后跟第二个流的所有元素。 |
static < T> Stream< T> | empty() | 返回一个空的序列Stream。 |
static < T> Stream< T> | generate(Supplier |
返回一个无限连续的无序流,其中每个元素都由提供的 生成Supplier。 |
static < T> Stream< T> | iterate(T seed, UnaryOperator |
返回一个无限连续有序Stream通过函数的迭代应用产生f为初始元素seed,产生Stream包括seed,f(seed), f(f(seed)),等。 |
static < T> Stream< T> | of(T... values) | 返回其元素为指定值的顺序有序流。 |
static < T> Stream< T> | of(T t) | 返回一个Stream包含单个元素的序列。 |
部分用法
创建流
- 使用Collection下的 stream() 和 parallelStream() 方法
List<String> list = new ArrayList<>();
//顺序流
Stream<String> stream = list.stream();
//并行流
Stream<String> parallelStream = list.parallelStream();
- Arrays 中的 stream() 方法
String[] nums = new String["a","b"];
Stream<String> stream = Arrays.stream(nums);
- Stream中的静态方法:of()、iterate()、generate() 具体参考表格
Stream<Integer> stream = Stream.of(1,2,3,4,5,6,7,8,9,10,11,12,13);
Stream<Integer> stream2 = Stream.iterate(0, (x) -> x + 2).limit(6);
//iterate流迭代器
//limit分页
Stream<Double> stream3 = Stream.generate(Math::random).limit(2);
- Pattern.splitAsStream() 方法,将字符串分隔成流
Pattern pattern = Pattern.compile(",");
Stream<String> stringStream = pattern.splitAsStream("a,b,c,d");
- BufferedReader.lines() 方法,将每行内容转成流
BufferedReader reader = new BufferedReader(new FileReader("文本路径"));
Stream<String> lineStream = reader.lines();
原文地址:https://www.cnblogs.com/shi-hao/p/15162497.html
- 测序文章数据上传找哪里
- Volatile实现原理实现原子性happens-before关系从happends-before规则分析可见性编译器层面实现可见性处理器层面实现可见性
- java中的toString方法
- 简单可视化-送你一双发现美的眼睛
- 享元模式
- 揭秘:针对中国移动用户的强大网银木马剖析
- 从源代码到Runtime发生的重排序编译器重排序指令重排序内存系统重排序阻止重排序
- 内存屏障保证缓存一致性优化
- 最新XSS 0day漏洞来袭,影响最新版本IE浏览器(含POC)
- Java内存模型—JMMhappens-before规则
- 那些年我们一起用过的Hybrid App
- 来看看美帝人民的安全意识:安全研究人员指责iOS版Outlook存在多处安全隐患
- 不是原配也可以-对接非原生配体
- oj放苹果
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- laravel Task Scheduling(任务调度)在windows下的使用详解
- PHP 7.4中使用预加载的方法详解
- PHP设计模式之工厂模式(Factory)入门与应用详解
- Laravel 实现Controller向blade前台模板赋值的四种方式小结
- Referer原理与图片防盗链实现方法详解
- Laravel 简单实现Ajax滚动加载示例
- PHP设计模式之解释器(Interpreter)模式入门与应用详解
- Laravel 实现在Blade模版中使用全局变量代替路径的例子
- PHP实现关键字搜索后描红功能示例
- 如何在CentOS中安装PHP7.4的方法步骤
- Linux安装Python3如何和系统自带的Python2并存
- Python Tricks 使用 pywinrm 远程控制 Windows 主机的方法
- PHP学习记录之常用的魔术常量详解
- laravel orm 关联条件查询代码
- PHP实现财务审核通过后返现金额到客户的功能