Stream 流

1、背景:Stream 是 Java8 的新特性,它允许你以声明式的方式处理数据集合,可以把 它看作是遍历数据集的高级迭代器。此外与 stream 与 lambada 表达示结合后 编码效率与大大提高,并且可读性更强。
2、Stream流是什么?
 从支持的数据源(数组和集合)处获得元素序列,放入Stream流中。即就是将数据源的元素拿出来单独存放在其他地方进行操作,并不对数据源本身进行操作。
(Stream中提供了一系列遍历操作)
3、如何获取流?
有三种方法可以获取流,如下所示:
(1)通过集合来获取流
ArrayList<String> arrayList=new ArrayList<>();
        Stream<String> stringStream=arrayList.stream();//从集合来获取流

利用的是集合中的Stream方法来获取。

(2)通过数组来获取流
 Integer []a={1,2,3,4,5};
        Stream<Integer> integerStream= Arrays.stream(a);//从数组来获取流

这个方法是Arrays类中的一个静态方法,将数组当做参数传入即可获得这个数组的流。

(3)通过Stream中的静态方法来获取流
 Stream<Integer> x=Stream.of(1,2,3,4,5,6);//利用方法来获取流

这个方法中的参数是一个可变长度参数,传入的参数将作为数据源数据存入流。

在这里简单介绍一下什么是可变长度参数:
写法: void test(int ... c) {}
其底层实质是数组。并且一个参数列表中只能有一个可变长度参数,并且只能放在最后一个位置。

4、对流的操作?

使用流过程:获取流->中间操作(返回的还是一个流)->终端操作(返回的是集合或数组)

注意:中间操作可以有多个,终端操作只有一个。

常用的中间操作举例:

Stream<Integer> stream=Stream.of(1,4,6,3,2,1,5);
        
         stream.sorted((o1,o2)->{return o1-o2;}) //排序操作,需要结合Lambda表达式

                 .distinct()//去重复操作

                    .skip(2)//跳过指定数目的元素

                        .limit(2)//只保留前指定数目的元素
      
                            .filter((e)->{return e>3;})//筛选出指定条件的元素
 
                               .map(Integer::intvalue)//此方法参数是一个方法,方法返回的是元素   

                                  .forEach((e)->{ System.out.println(e); });//终端操作遍历

值得注意的是:将Stream与Lambda表达式结合后,可以使程序更加简洁方便。


常用的终端操作举例:

   .toArray();//将流转换为数组,返回的是一个变换后的数组

   .max((o1,o2)->{return o1-o2;})
     .get();  //返回的是流中最大的元素,同理mix方法拿到最小的元素。

   .count();  //返回一个long类型,指的是流中元素个数。

   .reduce((a,b)->{return a+b;})
      .get(); //最终返回Integer类型,指的是流中元素之和。

   .anyMatch(e->{return e>3;})
              //返回一个boolean值,判断流中是否有元素满足条件

   .allMatch(e->{return e>3;})
              //返回一个boolean值,判断流中全部元素是否满足条件

   .collect(Collectors.toList());//将流转换为一个List集合
   .collect(Collectors.toSet());//将流转换为一个Set集合  
   .collect(Collectors.toMap(Apple::getCol,Apple::getValue));//将流转换为Map集合
     //转为Map这个方法参数也是方法,且一个返回值当做键,一个返回值当做值
    

总之:流的使用为让我们对集合或数组中元素的操作更加方便便捷。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值