Stream流

Stream流是什么

	1.可以看做iterator,一个stream流,对应一个集合状态,相当于副本了集合,然后stream指向这个副本的集合,stream<T>操作的T是容器中的每一个元素,不是容器本身除 Sream.of(基本类型数组)这种情况

Stream流的注意点(重要)

	1.stream流只能操作一次,就是说只要执行了终止方法,这个stream就不会再执行任何  	方法了
	因为非终止方法,可以返回新的Stream流(指向 新的 过滤后的 副本集合)
	而终止方法,不会返回新的stream
	
	2.stream流 的 非终止方法 返回的是 新的 stream流
	
	3.stream不调用 终止方法 中间操作不会执行

使用stream流的步骤

	创建stream --> 过滤链(每次过滤都有新的副本产生,也有新的stream指向这些新的副本) --> 汇聚(将容器中的元素操作后返回,可以是任何数据类型,可以对元素操作得到结果返回这个结果,也可以将容器中的元素返回)

创建stream流的方式

	1.通过集合collection(default Stream<E> stream() : 返回一个顺序流  default Stream<E> parallelStream() : 返回一个并行流)
		1.处理collection及其子接口 对象.stream()
		2.处理map:	
			1.keySet --> map.keySet().stream()(处理map中的keySet集合)
			2.valueSet --> map.valueSet().stream()(处理map中的valueSet集合)
			3.entrySet --> map.entrySet().stream()(处理map中的entrySet集合)
	
	2.通过Stream的of()
			 public static<T> Stream<T> of(T... values) : 返回一个流
		注意:T...values是可变数组,可以传数组或者单个数据类型,但是基本类型的数组,Stream是对这个数组喂一个元素操作的,例如Sream<int []> Stream.of(new int[])

stream流的方法介绍

1.非终止方法(中间操作) 返回新的流
	1.筛选与切片(过滤)
		filter(Predicat<T> p) 接收 Lambda , 从流中排除某些元素
		distinct() 筛选,通过流所生成元素的 hashCode() 和 equals() 去除重复元素
		limit(long maxSize) 截断流,使其元素不超过给定数量
		skip(long n) 跳过元素,返回一个扔掉了前 n 个元素的流。若流中元素不足 n 个,则返回一个空流。与 limit(n) 互补
		
	2.映射(其实就是对集合中的元素操作后,当做新的元素封装到一个新的集合中,一个新的stream指向这个新的集合)
		1.映射前的集合中的元素当作key,对key操作后成为新的集合的元素,新的集合的原始相当于value
		2.map(Function f) 接收一个函数作为参数,该函数会被应用到每个元素上,并将其映射成一个新的元素。
		3.flagmap(Function f) 和map一样,区别是当映射后集合中的元素是stream时,flagmap会将stream指向的这个集合的元素平铺开来作为 新的集合的元素
		4.例子:
			List<String> list = new ArrayList<>();
			Stream<Stream<Character>> s = list.stream().map((String s)->{
				List<Character> = new ArrayList<>();
				for (Character character : s.toCharArray) {
       				 list.add(character);
   			 	}
   				 return list.stream();
   			}这样新的Stream指向的集合的元素是Stream<Character>
		而如果用list.stream.flagmap(),那么最后的结果是将生成的Stream<Character>还会继续平铺开来,基础元素是Character,最后生成Stream<Character>


	3.排序
		sorted() 产生一个新流,其中按自然顺序排序
		sorted(Comparator com) 产生一个新流,其中按比较器顺序排序
	
2.终止方法(必须返回不是任何流的类型值,相当于给过滤后的流一个结果)
	1.匹配与查找
			allMatch(Predicate p) 检查是否匹配所有元素
			anyMatch(Predicate p) 检查是否至少匹配一个元素
			noneMatch(Predicate p) 检查是否没有匹配所有元素
			findFirst() 返回第一个元素
			findAny() 返回当前流中的任意元素
			count() 返回流中元素总数
			max(Comparator c) 返回流中最大值
			min(Comparator c) 返回流中最小值
			forEach(Consumer c) 迭代遍历集合中的元素
		
	2.归约(将元素结合起来得到一个值,例如求和) 常常和map()一起用
			reduce(T iden, BinaryOperator b) 可以将流中元素反复结合起来,得到一个值。返回 T
				BinaryOperator继承与BiFunction<T,T,T>其中一个T是返回值,其他两个是参数列表,意识就是集合中的元素传过来两个处理后返回一个值
				T,是指如果有,那么第一组元素就是T,和集合中的第一个元素
			reduce(BinaryOperator b) 可以将流中元素反复结合起来,得到一个值。返回 Optional<T>

	3.收集(将流中的数据处理后,生成一个集合返回)
			collect(Collector c) 将流转换为其他形式。接收一个 Collector接口的实现,用于给Stream中元素做汇总的方法
			Collects的很多静态方法可以创建常见收集器实例
				例如Collector c = Collecs.toList();toSet();toCollection()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值