Java之Stream学习(一)

Java之Stream学习(一)

首先强调Stream是一种工具,Stream可以实现的,以前其他方式也是可以实现。Stream只是方便我们数据处理,且代码看起来可读性更强,更好看。

1. Stream是什么?

从字面意思来看,就是流,在Java语言中有很多这种,例如输出流、输入流等概念。

从类官方注释来说:A sequence of elements supporting sequential and parallel aggregate operations. 支持顺序和并行聚合操作的元素序列

2. Stream使用

2.1 使用对象

Stream作为java 1.8特性。目前Stream支持Collection、Array类型操作

// List集合
List<String> list = new ArrayList<>();
// stream 方法标识转化为流
list.stream().distinct().collect(Collectors.toList());
// map 可以通过转化keys 或 values处理
// Array
String[] arr = new String[]{
   "1", "2", "3"};
Stream stream = Stream.of(arr);
2.2 如何使用

如上所说,**所有stream操作都是转化为stream对象。**每次执行stream方法 返回的也基本是新的stream对象。并最终通过辅助类转化为需要的对象,例如集合、Map等

3. Stream分类

/* 这是该类的注释,这里简单翻译 操作被组成一个stream管道,一个stream管道的源数据 可能是一个数组或集合或function或io.
 * 他是由0个或多个中间操作和一个终端操作,每次中间操作都是从一个流转换到另一个流
 * stram是有滞后性,计算源数据仅仅只有终端操作被初始化的时候才展现。
 * <a href="package-summary.html#StreamOps">operations</a> are composed into a
 * <em>stream pipeline</em>.  A stream pipeline consists of a source (which
 * might be an array, a collection, a generator function, an I/O channel,
 * etc), zero or more <em>intermediate operations</em> (which transform a
 * stream into another stream, such as {@link Stream#filter(Predicate)}), and a
 * <em>terminal operation</em> (which produces a result or side-effect, such
 * as {@link Stream#count()} or {@link Stream#forEach(Consumer)}).
 * Streams are lazy; computation on the source data is only performed when the
 * terminal operation is initiated, and source elements are consumed only
 * as needed.
 */

通过上面java源代码本身注释,可以发现。stream分为两类

中间操作(intermediate operations): 它是有一个流转换成另一个流,常见的操作有 filter()、distinct()、skip()、map()等

终端操作(terminal operation): 常见的终端操作 例如有 forEach() collect()

4. 常见示例

下面举例 以集合Collection为示例

4.1 过滤指定元素
// 过滤重复元素 distinct过滤的是相同元素 如果是类 则为equals相等元素
List<String> list = new ArrayList<>();
List<String> newList = list.stream().distinct().collect(Collectors.toList());
// 过滤指定条件元素 filter接收一个 Predicate 函数式接口
List<String> newList2 = list.stream().filter(c -> c != null).collect(Collectors.toList());
4.2 跳过或截取指定长度列表
// skip 中间操作 跳过 n 个元素 返回剩余元素 下图展示跳过 1个元素 返回 [2,3]
List<String> list = new ArrayList<>();
list.addAll(Arrays.asList("1", "2", "3"));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值