Java8特性之Stream API

Stream是java8中处理集合(数组)的关键抽象概念,可以对集合进行查找、过滤、映射、规约等操作。使用Stream API对集合(数组)进行操作,类似于使用sql进行数据库查询。Stream是有关于集合计算的,Collection是有关于集合储存的。Stream的操作分为三个步骤,1.创建Stream;2.中间操作:对数据源进行处理但不执行;3.终止操作:一旦执行终止操作就会执行中间操作链,并产生结果。之后不会再被使用,如果还是操作这个集合或数组,可以重新创建Stream。

注意事项:

  1. Stream自己不会存储数据。
  2. Stream不会改变源对象,会返回一个持有结果的新Stream。
  3. Stream操作是延迟执行的,只有遇到终止操作才会执行。

1.创建Stream

  • Collection.stream():通过集合创建Stream:方法位于Collection接口中(默认方法),分别为stream、parallelStream方法,其中的stream返回一个顺序流,parallelStream返回一个并行流
//顺序流
List<String> stringList = Arrays.asList("张三","李四","王五","赵六");
stringList.stream().forEach(System.out::println);
  • Arrays.stream(T t):通过Arrays的静态方法steam获取数组流:Arrays中包括处理基础类型的steam方法,如int类型数组返回IntStream对于引用类型的对象数组返回Stream
//基础类型
int[] num = new int[]{
   1,2,36,5};
IntStream intStream = Arrays.stream(num);
intStream.forEach(System.out::println);

//引用类型
Major[] majors = new Major[]{
   new Major("张三",1),new Major("李四",2)};
Stream<Major> majorStream = Arrays.stream(majors);
majorStream.forEach(System.out::println);
  • Stream.of:通过Stream的静态方法Stream<T> of(T… values)方法。
//Stream静态方法of创建Stream,of为可变参数,相当于数组,可以放入多个同类型
Stream<Double> doubleStream = Stream.of(1.2,3.1,5.2,100.0);
doubleStream.forEach(System.out::println);
  • 创建无限流

1.Stream.iterate

//迭代
//public static<T> Stream<T> iterate(final T seed, final UnaryOperator<T> f)
//以2为初始值,计算平方,得到的值再计算平方,依次进行(1=<n<=5):
//定义一个初始值seed为2,定义函数为t*t,即第一次为2,第二次为2*2=4,第三次为4*4=16,
//第四次为16*16=256,第五次为256*256=65536,依次运算。
//即用第n-1个数作为变量带入关于t的函数后进行计算,得到的结果再次作为初始值调用t的函数。
Stream.iterate(2,t->t*t).limit(5).forEach(System.out::println);

2.Stream.generate

//生成
//public static<T> Stream<T> generate(Supplier<? extends T> s)
//生成10个随机数并打印
Stream<Double> doubleStream1 = Stream.generate(Math::random).limit(10);
doubleStream1.forEach(System.out::println);

2.中间操作

多个中间操作可以连接形成一个流水线,除非触发终止操作否则不会执行,触发终止操作后一次性全部处理,成为惰性求值,在处理完后这个Stream不能再使用。

Sex类

public enum Sex {
   

    MEN("男"),
    WOMEN("女");
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值