java8 Stream

Stream接口继承图

一、Stream原理

Stream原理图

1.使用Stream的基本步骤:

1)创建Stream
2)转换Stream,每次转换原有Stream对象不改变,返回一个新的Stream对象,【可以有多次转换】
3)对Stream进行聚合reduce操作,获取想要的结果;

2.创建Stream的方式:

1)通过Stream接口的静态工厂方法(注意:Java8里接口可以带静态方法);
a)of:有两个overload方法,一个接受变长参数,一个接口单一值。

Stream<Integer> integerStream = Stream.of(1, 2, 3, 5);

b)generator:生成一个无限长度的Stream,其元素的生成是通过给定的Supplier(这个接口可以看成一个对象的工厂,每次调用返回一个给定类型的对象),配合limit使用。

Stream.generate(Math::random).limit(10).forEach(System.out::println);

c)iterate:也是生成无限长度的Stream,和generator不同的是,其元素的生成是重复对给定的种子值(seed)调用用户指定函数来生成的。其中包含的元素可以认为是:seed,f(seed),f(f(seed))无限循环。

Stream.iterate(1, item -> item + 1).limit(10).forEach(System.out::println);

2)通过Collection接口的默认方法(默认方法:default method,也是Java8中的一个新特性,就是接口中的一个带有实现的方法)。

3.转换Stream:

List<Integer> nums = Lists.newArrayList(1,1,null,2,3,4,null,5,6,7,8,9,10);
System.out.println(“sum is:+ nums.stream()
							.filter(num -> num != null)
							.distinct()
							.mapToInt(num -> num * 2)
							.peek(System.out::println)
							.skip(2)
							.limit(4)
							.sum());

4.聚合(reduce):

reduce

二、两类操作

中间操作终端操作
concat() allMatch() 判断条件里的元素,所有的都是,返回true
distinct() 去除重复元素anyMatch() 判断的条件里,任意一个元素成功,返回true
filter() 过滤collect() 收集器
flatMap() 合并两个Streamcount() 计数
limit() 返回一个不超过给定长度的流。findAny() findAny方法将返回当前流中的任意元素。
map() 对流中每一个元素应用函数findFirst() 查找第一个元素
peek() 打断点forEach() 遍历
skip() 返回一个扔掉了前n个元素的流。如果流中元素不足n个,则返回一个空流。forEachOrdered() 顺序遍历
sorted() 排序max() 最大
parallel() 并行min() 最小
sequential() noneMatch() noneMatch跟allMatch相反,判断条件里的元素,所有的都不是,返回true
unordered()reduce() 聚合
toArray()

三、IntStream、LongStream和DoubleStream

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值