java8 Stream API初识

聊到了java8,自然很多很多人会想到lambda表达式和函数式接口这两个比较重要的特性。同时Stream API则是基于这个两个重要特性而衍生出的比较重要的工具,它是对java集合操作的增强,它用到了比较精炼表达的lambda表达式,把对集合的相关汇聚操作提取出可读性高的API,并且支持串行和并行两种处理方式,它让我们抛弃传统的迭代循环方式,让我们面向stream的方式进行操作,这是一种替代方案,当然java8必须是向前兼容,你也可以用以前的方式,但是真的已经不建议那样了,因为steam API是一个好用且效率高的API。

网上也已经有很多讲解stream api的例子,我不想自己再讲过多的理论性的东西,但是理论的东西也是蛮重要的,因为理论是指导,如果有一天你对你当初写的那段理论性文字有了更深刻的体会的时候,你发现短小精简的理论概要其实已经道出了它根本性的原理。

所以要讲也是讲比较关键的,下面就说一下网上摘抄的我认为比较关键的:

  • Java8中的Stream是对集合(Collection)对象功能的增强,它专注于对集合对象非常便利、高效的聚合操作(aggregate
    operation),或者大批量数据操作(bulk data operation)
  • Stream不是集合元素,它也不是数据结构并不保存数据,它是有关算法和计算的,它更像是一个高级版本的Iterator

以上第一段话道出了stream API出现的初衷,即它是解决什么问题而出现的,第二段话则道出了stream API运作的本质,即有关算法和计算的,正是因为它的算法和计算使得我们借助它可以高效的进行有关有关集合的高效聚合操作,正是因为它抽象的业务提取封装能力使得我们便利的操作集合,不再像以往那样循环取每一个元素再去操作,这正是java8呼吁的不要再使用循环了。

下面就结合一些具体的实例对比道出java8 Stream API的强大:

filter

@Test
    public void testFilter() {
        List<Integer> integers = Arrays.asList(1, 2, 3, 4, 5);

        //java8之前
        List<Integer> filtered1 = new ArrayList<>();
        for (Integer integer : integers) {
            if (integer > 3) {
                filtered1.add(integer);
            }
        }
        System.out.println(filtered1);

        //java8之后
        List<Integer> filtered2 = integers.stream().filter(i -> i > 3).collect(Collectors.toList());
        System.out.println(filtered2);

    }

sum

    @Test
    public void testSum() {
        List<Integer> integers = Arrays.asList(1, 2, 3, 4, 5);

        int sum1 = 0;
        for (Integer integer : integers) {
            if (integer > 2) {
                sum1 += integer;
            }
        }
        System.out.println(sum1);

        int sum2 = integers.stream().filter(i -> i > 2).mapToInt(i -> i).sum();
        System.out.println(sum2);

    }

forEach

    /**
     * 输出所有元素的2倍大于3的元素
     *
     */
    @Test
    public void testForEach() {
        List<Integer> integers = Arrays.asList(1, 2, 3, 4, 5);

        for (Integer integer : integers) {
            if (2 * integer > 3) {
                System.out.println(integer);
            }
        }

        integers.stream().filter(i -> 2 * i > 3).forEach(System.out::println);

    }

以上列出了stream提供的一些简单的API示例与java8之前做法的对比,可以看出java8在处理集合的写法比之前更精简,更重要的是现在的写法的可读性更高!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值