Stream代替for循环

前言

用Stream代替for循环进行输出可以使代码更简洁。

例如

        List<String> players =Arrays.asList("kebe","jams","cuerry","cyyt");
          for (String player: players){
           if (player.startsWith("k")){
               String temp =player.toUpperCase();
                System.out.println(temp);
            }
        }

转化成Stream流一行代码就可以搞定

 List<String> plt=  players.stream()
                .filter(s->s.startsWith("c"))
                .map(String::toUpperCase)
                .sorted()
                .collect(Collectors.toList());

数组也是可以转化为流的

String[]playes={"kobe","james","curry","cyyt"};
Stream.of(players).filter().map();

Stream并行流

这里为什么要区分有状态和无状态呢,对于有状态操作,尽量不使用并行。

那什么又是并行呢,.paralleStream()

Stream并行流计算>>普通for循环~=Stream串行流计算(并不一定,各有各性能比较好和比较差的情况)

数据容量越大,Stream流的执行效率越高。

Stream并行流计算通常能够比较好的利用CPU的多核优势。CPU核心越多,Stream并行流计算效率越高。

 

Stream查找与匹配元素

List<Employee> employees = Arrays.asList(e1,e2,e3,e4,e5,e6)

employees.stream().anyMatch(e->e.getAge()>70) //是否有一个人的年龄大于70,
employees.stream().allMatch(e->e.getAge()>10)//是否所有人的年龄都大于10
employees.stream().noneMatch(e->e.getAge()<18)//是否不存在小于18的人
employees.stream().filter(e->e.getAge()>40).findFirst(); //第一个年龄大于40的人
employees.stream().filter(e->e.getAge()>40).findAny()//查找任意一个年龄大于40的人
employees.stream().filter(e->e.getAge()>90).findFirst().orElse(new Employee(0,0,"F","","")//如果没有查到第一个大于90的人,就给一个默认值。

Stream集合元素归约

就是累加起来

List<Integer> numbers =Arrays.asList(1,2,3,4,5,6);
Integer total = numbers.stream().reduce(0,(subtotal,element)->subtotal+element)
//Integer total = numbers.stream().reduce(0,Integer::sum)  总数求和,这两个是一样的

 

总结

感觉需要学习的东西越来越多,自己也越来越菜。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值