Java8 的stream

流与集合有以下几种不同:

  • 有存储。 流不是存储元素的数据结构; 相反,它通过计算操作的流水线传送诸如数据结构,阵列,生成器功能或I / O通道的源的元件。
  • 功能性质。 流上的操作产生结果,但不会修改其来源。 例如,过滤从原Stream获得的Stream会将不需要过滤的元素生成新的Stream,而不是从源集合中删除元素。
  • 懒惰操作。 许多流操作(如过滤,映射或重复删除)可以懒惰地实现,从而暴露优化的机会。
  • 大小无限。 虽然集合的大小有限,但流不没有大小的限制
  • 消耗品。 流的元素只能在流的生命周期中访问一次。 像Iterator一样 ,必须生成一个新流来重新访问元素。
下面是Stream的一些常用api

public class Test{
	public static void main(String[] arg) throws Exception{
		//java8中流的常用操作
		String[] array = {"a","b","c","d","e","f","g","h"};

		//注意:为什么这里不先定义一个stream(下面这样定义)然后在下面需要用到Arrays.stream(array) 地方用stream直接代替呢?
		//因为stream和Iterator一样属于“消耗品” 只能用一次,不能重复使用,除非你生成一个新的流
		//Stream<String> stream = Arrays.stream(array);


		//boolean allMatch(Predicate<? super T> predicate) 此流的所有元素是否满足predicate表达式
		System.out.println(Arrays.stream(array).allMatch(e->e instanceof String));//true

		//boolean anyMatch(Predicate<? super T> predicate) 此流的任一元素是否满足predicate表达式
		System.out.println(Arrays.stream(array).anyMatch(e->e == "a"));//true

		//collect(Collector<? super T,A,R> collector) 能将流生成Collection<E>
		List<String> list = Arrays.stream(array).collect(Collectors.toList());
		System.out.println(list);//[a, b, c, d, e, f, g, h]



		//long count() 返回此流中的元素数
		System.out.println(Arrays.stream(array).count());//8


		//Stream<T>	filter(Predicate<? super T> predicate)  返回一个新流,新流中的元素为 原流中满足predicate条件的元素
		List<String> list2 = Arrays.stream(array).filter(e->e!="a").collect(Collectors.toList());
		System.out.println(list2);//[b, c, d, e, f, g, h]

		//void forEach(Consumer<? super T> action) 对此流的每个元素执行操作
		Arrays.stream(array).forEach(e->System.out.println(e));



		/*********************下面的方法就不举例了*************************/

		//Stream<T> distinct() 将流中相同的元素只保留一个,然后返回一个新流

		//创建一个懒惰连接的流,其元素是第一个流的所有元素,后跟第二个流的所有元素
		//Stream<T> concat(Stream<? extends T> a, Stream<? extends T> b) 


		//Optional<T>		max(Comparator<? super T> comparator) 根据提供的 Comparator返回此流的最大元素
		//Optional<T>		min(Comparator<? super T> comparator) 根据提供的 Comparator返回此流的最小元素


		//Stream<T>		sorted() 返回由此流的元素组成的流,根据自然顺序排序
		//Object[]		toArray() 返回一个包含此流的元素的数组。


//Stream<T> limit(long maxSize) 返回由此流的元素组成的流,截短长度不能超过 maxSize
	}
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值