Java Stream流知识总结
说明
在Java8中,得益于Lambda所带来的函数式编程,引入了一个全新的Stream概念,用于解决已有集合类库既有的弊端
遍历
传统集合在于使用循环遍历
Java8的Lambda让我们可以更加专注于做什么(What),而不是怎么做(How),这点此前已经结合内部类进行了对比说明。现在,我们仔细体会一下上例代码,可以发现:
- for循环的语法就是“怎么做”
- for循环的循环体才是“做什么”
传统集合遍历
importjava.util.ArrayList; importjava.util.List; /** *@authortanglei *@date2020/6/1010:21下午 */ publicclassNormalFilter{ publicstaticvoidmain(String[]args){ Listlist=newArrayList<>(); list.add("张无忌"); list.add("周芷若"); list.add("赵敏"); list.add("张强"); list.add("张三丰"); List zhangList=newArrayList<>(); for(Stringname:list){ if(name.startsWith("张")){ zhangList.add(name); } } List shortList=newArrayList<>(); for(Stringname:zhangList){ if(name.length()==3){ shortList.add(name); } } for(Stringname:shortList){ System.out.println(name); } } }
Stream的优雅
importjava.util.ArrayList; importjava.util.List; /** *@authortanglei *@date2020/6/1010:28下午 */ publicclassStreamFilter{ publicstaticvoidmain(String[]args){ Listlist=newArrayList<>(); list.add("张无忌"); list.add("周芷若"); list.add("赵敏"); list.add("张强"); list.add("张三丰"); list.stream() .filter(s->s.startsWith("张")) .filter(s->s.length()==3) .forEach(System.out::println); } }
Stream的优雅使用stream可以十分简单明了的体现代码的逻辑
“Stream流”其实是一个集合元素的函数模型,它并不是集合,也不是数据结构,其本身并不存储任何元素(或其地址值
获取流
- 所有的Collection集合都可以通过stream默认方法获取流;
- Stream接口的静态方法of可以获取数组对应的流。
根据Collection获取流
publicstaticvoidmain(String[]args){ Listlist=newArrayList<>(); Stream stream1=list.stream(); Set set=newHashSet<>(); Stream stream2=set.stream(); Vector vector=newVector<>(); }
根据Map获取流
publicstaticvoidmain(String[]args){ Mapmap=newHashMap<>(); Stream keyStream=map.keySet().stream(); Stream valueStream=map.values().stream(); Stream >entryStream= map.entrySet().stream(); }
根据数组获取流
publicstaticvoidmain(String[]args){ String[]array={"张无忌","张翠山","张三丰","张一元"}; Streamstream=Stream.of(array); }
常用方法
逐一处理:forEach
会将每一个流元素交给该函数进行处理
publicstaticvoidmain(String[]args){ Streamstream=Stream.of("张无忌","张三丰","周芷若"); stream.forEach(name‐>System.out.println(name)); }
过滤:filter
可以通过filter方法将一个流转换成另一个子集流
publicstaticvoidmain(String[]args){ Streamoriginal=Stream.of("张无忌","张三丰","周芷若"); Stream result=original.filter(s‐> s.startsWith("张")); }
映射:map
如果需要将流中的元素映射到另一个流中
publicstaticvoidmain(String[]args){ Streamoriginal=Stream.of("10","12","18"); Stream result=original.map(str‐>Integer.parseInt(str)); }
统计个数:count
数一数其中的元素个数
publicstaticvoidmain(String[]args){ Streamoriginal=Stream.of("张无忌","张三丰","周芷若"); Stream result=original.filter(s‐>s.startsWith("张")); System.out.println(result.count());//2 }
取用前几个:limit
可以对流进行截取,只取用前n个
publicstaticvoidmain(String[]args){ Streamoriginal=Stream.of("张无忌","张三丰","周芷若"); Stream result=original.limit(2); System.out.println(result.count());//2 }
跳过前几个:skip
如果希望跳过前几个元素
publicstaticvoidmain(String[]args){ Streamoriginal=Stream.of("张无忌","张三丰","周芷若"); Stream result=original.skip(2); System.out.println(result.count());//1 }
组合:concat
如果有两个流,希望合并成为一个流
publicstaticvoidmain(String[]args){ StreamstreamA=Stream.of("张无忌"); Stream streamB=Stream.of("张翠山"); Stream result=Stream.concat(streamA,streamB); }
感谢
黑马程序员
以及勤劳的自己
以上就是JavaStream流知识总结的详细内容,更多关于JavaStream流的资料请关注毛票票其它相关文章!