优雅的开发Java代码-steam流

本文介绍了JavaStream流的特点,如非持久性、延迟执行和操作节点,通过实例展示了如何用Stream流一行代码实现功能,对比了与for循环的优缺点,强调了在复杂业务场景下Stream流的可维护性问题。
摘要由CSDN通过智能技术生成

先说steam流的特点:

1、Stream流一般不会改变数据源,只会生成一个新的数据流。
2、Stream流不会存储数据,只会根据设置的操作节点处理数据。
3、Stream流是延迟执行的,只有在调用终端操作后才会进行流转。

举个栗子

public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("张无忌");
        list.add("周正若");
        list.add("赵斌");
        list.add("张强");
        list.add("张三丰");

        //获取集合中张开头并且长度为3的元素
        list.stream().filter(name -> name.startsWith("张")).filter(name -> name.length() == 3).forEach(name -> System.out.println(name));
        //结果 张无忌 张三丰
        System.out.println("----------------------steam流手动分割1--------------------");
        // 1.把所有“张”姓开头元素存储到新集合
        List<String> list2 = list.stream().filter(name -> name.startsWith("张")).collect(Collectors.toList());
        System.out.println(list2);
        // [张无忌, 张强, 张三丰]
        System.out.println("----------------------for循环手动分割1--------------------");
        //或者for循环
        List<String> list3 = new ArrayList<>();
        for (String s : list) {
            if (s.startsWith("张")){
                list3.add(s);
            }
        }
        System.out.println(list3);
        // [张无忌, 张强, 张三丰]

        // 2.把所有“张”姓开头且长度为3的元素存储到新集合
        System.out.println("----------------------steam流手动分割2--------------------");
        List<String> list4 = list.stream().filter(name -> name.startsWith("张")).filter(name -> name.length() == 3).collect(Collectors.toList());
        System.out.println(list4);
        //[张无忌, 张三丰]
        System.out.println("----------------------for循环steam流手动分割2--------------------");
        //或者for循环
        List<String> list5 = new ArrayList<>();
        for (String s : list) {
            if (s.startsWith("张") && s.length() == 3){
                list5.add(s);
            }
        }
        System.out.println(list5);
        //[张无忌, 张三丰]

        System.out.println("----------------------手动分割4--------------------");

       


        //单列集合获取Stream流
        Collections.addAll(list, "a","b","c","d","e");
        //获取到一个流水线,并把集合中的数据方法流水线上
        //Stream<String> stream1 = list.stream();
        //使用终结方法打印流水线上数据
        //stream1.forEach( s ->System.out.println(s) );

        list.stream().forEach(s -> System.out.println(s));
    }

实现同一个需求,steam只需要一行代码就解决,经典for循环需要5行,看起来是比较优雅的,

缺点就是可读性较差,业务比较复杂的情况下,每一个steam在后期维护时可能都需要考虑

---------------------------------------------------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值