java8Stream

Stream简介

Stream是Java8的新特性,它允许你一声明式的方式处理集合,可以把它看作是遍历数据集的高级迭代器.

Stream与lambada表示结合后编码效率大大提高,而且可读性更强

java8中的stream与(Inputstream&Outputsteam)是不同的概念

stream是对数据进行处理,进行各种操作,而非IO里的数据传输

Stream定义

“从支持数据处理操作的源,生成的元素序列”

元素列表:和集合一样,流也提供了一个接口,访问特定元素类型的一组有序值

数据源:获取数据的源,比如集合

数据处理操作:流更偏向于数据处理和计算,比如filter、map、find、sort等。简单来说,我们通过一个集合的stream方法获取一个流,然后对流进行一系列流操作,最后再构建成我们需要的数据集合

Stream处理数据过程

数组/集合类–>流—各种操作(排序,过滤)–>结果(数组/集合)

获取流

 ArrayList<Integer> arrayList = new ArrayList<>();
        arrayList.add(13);
        arrayList.add(12);
        arrayList.add(23);
        //使用Collection 接口下的 stream()
        Stream<Integer> stream = arrayList.stream();//将集合转换为一个流

        Integer[] array = new Integer[]{1,2,3,4};
        //使用Arrays 中的 stream() 方法,将数组转成流
        Stream<Integer> stream1 = Arrays.stream(array);//把数组转换为一个流
        //使用Stream中的静态方法:of()
        Stream stream2 = Stream.of(1,2,3,4,5,6,7,8,9);//直接给stream赋值,参数为可变长度参数

流操作

流操作可以分为两类:中间操作终端操作


中间操作

流的各种数据处理

filter:过滤流中的某些元素

sorted():自然排序,六中元素需要实现Comparable

distinct:去除重复船速

limit(n):获取n个元素

skip(n):跳过n个元素,配合limit(n)可以实现分页

map():将其映射成为一个新的元素

List<Integer>  list = new ArrayList<>();
        list.add(123);
        list.add(13);
        list.add(23);
        list.add(23);
        list.add(23);
        list.add(1232);
        list.add(22123);
        list.add(12345);
        list.stream().filter((e)->{
            return e>20;//过滤小于等于20的数
        }).distinct().sorted((o1,o2)->{
            return o2-o1;//按照降序排序
        }).forEach((e)->{
            System.out.println(e);//遍历打印每个元素
        });

终端操作

把流转为最终结果(数组/集合/单值)

forEach: 遍历流中的元素
toArray:将流中的元素倒入一个数组
Min:返回流中元素最小值
Max:返回流中元素最大值
count:返回流中元素的总个数
Reduce:所有元素求和
anyMatch:接收一个 Predicate 函数,只要流中有一个元素满足条件则返回true,否则返回false
allMatch:接收一个 Predicate 函数,当流中每个元素都符合条件时才返回true,否则返回false
findFirst:返回流中第一个元素
collect:将流中的元素倒入一个集合,Collection或Map

 ArrayList arrayList = new ArrayList();
        arrayList.add(1);
        arrayList.add(1);
        arrayList.add(3);
        arrayList.add(2);
        arrayList.add(6);
        arrayList.add(4);
        arrayList.add(8);
        arrayList.add(22);
        arrayList.add(12);
        Stream<Integer> stream = arrayList.stream();
       Integer num =  stream.distinct()
                .max((o1,o2)->{//终端操作取最大值
                    return o1-o2;
                }).get();
        System.out.println(num);//22
        
        /*long num1 = stream.distinct().count();*/
        /*System.out.println(num1);*/

        /*Integer sum = stream.distinct().reduce(0,(o1,o2)->{
            return o1+o2;
        } );
        System.out.println(sum);*/
        
  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值