前言
用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) 总数求和,这两个是一样的
总结
感觉需要学习的东西越来越多,自己也越来越菜。