Stream 简介
在 Java 8 中,提供了 Stream 类,用于对集合或数组等数据源进行一系列操作。Stream 类提供了一种便捷和功能强大的方式来处理数据流,包括过滤、映射、排序、聚合等。
Stream 特点
Stream 类的特点在于它成为处理集合和数据流的强大工具,适用于各种数据处理场景,从简单的转换到复杂的数据聚合,都可以轻松完成,其特点在于:
(1)能够实现链式操作:Stream 类支持链式操作,允许将多个操作进行串联使用,形成一条处 理流水线。
(2)能够进行惰性求值:Stream 类的操作是惰性求值的,意味着中间的操作只有在终端操作才会被调用下执行。这有助于优化处理大数据量的情况,只对需要的数据进行处理。
(3)使用函数式的编程:Stream 操作基于函数式编程,允许使用 Lambda 表达式来定义操作,从而实现更加简洁和实用的代码。
(4)不修改原始数据:Stream 操作通常不会修改原始数据,而是生成一个新的 Stream 来存储数据,从而避免了不必要的副作用。
(5)支持并行处理:Stream 类可以容易的支持并行处理,使得某些操作可以在多个线程中执行,提高处理效率。
(6)和容器无关:Stream 类可以处理不同类型的数据源,例如集合、数组等,使得代码具有通用性。
Steam 常用方法
- filter():根据所给定的条件对数据进行过滤,获得符合条件的元素。
- map():对每个元素执行相应的映射操作,生成一个新的 Stream 对象。
- limit():限制 Stream 的大小,只保留指定数量的元素。
- count():统计 Steam 对象中的元素数量。
- distinct():去除重复元素。
下图为JAVA“指针”典型的例子 —— 内存地址示例,但是JAVA表面上说没有指针,但是程序内部都有指针的概念,务必不能搞混!!!!!!
如果程序报错 nullPointerExceptionc —— 空指针异常!
内存地址存到栈User中,User取对象的具体的属性,找堆的内存地址
User user = new User( );
Stream与collection的区别
(1)Stream会存到另一个(变换后的集合)
(2)Collection会在原来的集合就可以直接操作
共同点:对自定义的排序有一个标准的参考——(comparable接口/comparator接口),
使用自定义类型对象排序的规则:
都用于Java中进行对象比较和排序
重写接口CompareTo( )提供的规则进行实现
Optional.ofNullable(变量名).ispresent())