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("张三丰");
ListzhangList=newArrayList<>();
for(Stringname:list){
if(name.startsWith("张")){
zhangList.add(name);
}
}
ListshortList=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<>();
	Streamstream1=list.stream();
	Setset=newHashSet<>();
	Streamstream2=set.stream();
	Vectorvector=newVector<>();
}
     
根据Map获取流
publicstaticvoidmain(String[]args){
	Mapmap=newHashMap<>();
	StreamkeyStream=map.keySet().stream();
	StreamvalueStream=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("张无忌","张三丰","周芷若");
	Streamresult=original.filter(s‐>	s.startsWith("张"));
}
  
映射:map
如果需要将流中的元素映射到另一个流中
publicstaticvoidmain(String[]args){
	Streamoriginal=Stream.of("10","12","18");
	Streamresult=original.map(str‐>Integer.parseInt(str));
}
  
统计个数:count
数一数其中的元素个数
publicstaticvoidmain(String[]args){
	Streamoriginal=Stream.of("张无忌","张三丰","周芷若");
Streamresult=original.filter(s‐>s.startsWith("张"));
System.out.println(result.count());//2
}
  
取用前几个:limit
可以对流进行截取,只取用前n个
publicstaticvoidmain(String[]args){
	Streamoriginal=Stream.of("张无忌","张三丰","周芷若");
Streamresult=original.limit(2);	
System.out.println(result.count());//2
}
  
跳过前几个:skip
如果希望跳过前几个元素
publicstaticvoidmain(String[]args){
	Streamoriginal=Stream.of("张无忌","张三丰","周芷若");
Streamresult=original.skip(2);
System.out.println(result.count());//1
}
  
组合:concat
如果有两个流,希望合并成为一个流
publicstaticvoidmain(String[]args){
	StreamstreamA=Stream.of("张无忌");	
StreamstreamB=Stream.of("张翠山");
Streamresult=Stream.concat(streamA,streamB);
}
   
感谢
黑马程序员
以及勤劳的自己
以上就是JavaStream流知识总结的详细内容,更多关于JavaStream流的资料请关注毛票票其它相关文章!