Stream
案例:ZJJ_JavaBasic_2019/10/30_11:52:13_nnxww |
---|
Stream 是 Java8 中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。
使用Stream API 对集合数据进行操作,就类似于使用 SQL 执行的数据库查询。也可以使用 Stream API 来并行执行操作。简而言之,Stream API 提供了一种高效且易于使用的处理数据的方式。
流 (Stream) 到底是什么呢 ?
是数据渠道,用于操作数据源(集合、数组等)所生成的元素序列。“集合讲的是数据,流讲的是计算! ”
注意:
①Stream 自己不会存储元素。
②Stream 不会改变源对象。相反,他们会返回一个持有结果的新Stream。
③Stream 操作是延迟执行的。这意味着他们会等到需要结果的时候才执行。
性能问题
http://note.youdao.com/noteshare?id=d236f18a2c26d40eff793da2cff003f2
5. 创建方式
案例:ZJJ_JavaBasic_2019/10/30_14:51:07_5pxda |
---|
@Test public void ceui1() { //1. Collection 提供了两个方法 stream() 与 parallelStream() ArrayList Stream Stream } //2. 通过 Arrays 中的 stream() 获取一个数组流 @Test public void ceui2() { Integer[] nums = new Integer[10]; Stream } @Test public void ceui3() { //3. 通过 Stream 类中静态方法 of() Stream } @Test public void ceui4() { //4. 创建无限流 两种方式 //迭代 Stream stream3.forEach(System.out::println); //生成 Stream stream4.forEach(System.out::println); } |
a)筛选与切片
filter——接收 Lambda , 从流中排除某些元素。
limit——截断流,使其元素不超过给定数量。
skip(n) —— 跳过元素,返回一个扔掉了前 n 个元素的流。若流中元素不足 n 个,则返回一个空流。与 limit(n) 互补
distinct——筛选,通过流所生成元素的 hashCode() 和 equals() 去除重复元素
案例:ZJJ_JavaBasic_2019/10/30_15:41:09_c5k7w |
---|
b)映射
案例:ZJJ_JavaBasic_2019/10/30_15:49:00_69l3b |
---|
//提取名字出来
/这两个效果是一样的/ Stream .map(transaction -> transaction.getTrader().getName() ); stringStream1.forEach(System.out::println); System.out.println(“—————————————————-“); Stream .map(transaction -> { String name = transaction.getTrader().getName(); return name; } ); stringStream.forEach(System.out::println); |
---|
c)排序
sorted()——自然排序
sorted(Comparator com)——定制排序
案例:ZJJ_JavaBasic_2019/10/30_16:14:43_5fxff
d)查找与匹配
| 案例:ZJJ_JavaBasic_2019/10/30_17:43:55_dybqm
| | —- |
allMatch——检查是否匹配所有元素
anyMatch——检查是否至少匹配一个元素
noneMatch——检查是否没有匹配的元素
findFirst——返回第一个元素
findAny——返回当前流中的任意元素
count——返回流中元素的总个数
max——返回流中最大值
min——返回流中最小值
e)终止操作
f)归约
| 案例:ZJJ_JavaBasic_2019/10/30_18:06:44_k8aq7
| | —- |
reduce(T iden , BinaryOperator b) 可以将流中元素反复结合起来,得到一个值.返回T
reduce(BinaryOperator b) 可以将流中元素反复结合起来,得到一个值.返回Optional
g)收集
案例:ZJJ_JavaBasic_2019/10/30_18:34:05_ftv1z |
---|
Collector 接口中方法的实现决定了如何对流执行收集操作(如收集到 List、Set、Map)。但是 Collectors 实用类提供了很多静态方法,可以方便地创建常见收集器实例,具体方法与实例如下表: