java_stream流
2019-04-28 08:24:01来源:博客园 阅读 ()
Stream流的个人理解
一.Stream流_Stream流进行集合过滤的效果演示
1).什么是“Stream流”:它在Java中是一个“接口”,它类似于“迭代器”,但Stream比迭代器的功能更强大。
它也是用来处理集合中的元素,但比迭代器的功能更多。
2).Stream流可以对集合元素进行连续的筛选、过滤、统计等操作。它再结合Lambda表达式的使用,
使得这些操作变得非常的简单。
3).示例代码:
public class Demo { public static void main(String[] args) { List<String> list = new ArrayList<>(); list.add("张无忌"); list.add("周芷若"); list.add("赵敏"); list.add("张强"); list.add("张三丰"); //1.筛选出所有的张姓学员,并存储到一个新集合 List<String> list1 = new ArrayList<>(); for (int i = 0; i < list.size(); i++) { if (list.get(i).startsWith("张")) { list1.add(list.get(i)); } } //2.再筛选出张姓学员中名字是3个字的学员,并存储到一个新集合 List<String> list2 = new ArrayList<>(); for (int i = 0; i < list1.size(); i++) { if (list1.get(i).length() == 3) { list2.add(list1.get(i)); } } //3.打印名字是3个字的学员中的第一名学员: System.out.println(list2.get(0)); System.out.println("----------------------------------"); //使用Stream流结合Lambda表达式 list.stream().filter(s -> s.startsWith("张")) .filter(s -> s.length() == 3) .limit(1) .forEach(System.out::println); } }
二.Stream流思想概述
1.流思想:类似于迭代器,用于对”集合元素”和数组进行筛选,过滤,统计用的
2.流的工作方式:流对象的每一个操作都会使这个对象成为垃圾;但这个操作的方法通常会返回一个新流对象
每个流对象都是一次性的,类似于流水线
三. Stream流_获取List_Set_Map_数组流
1.通过Collection集合(List,Set)获取流
List:
List list=new ArrayList();
list.stream();
Set:
Set set=new HashSet();
set.stream();
2.通过Map集合获取流(Map集合不能直接获取流,只能先转成Set再获取)
方式一:
Map map=new HashMap();
Set<Map.Entry> set=map.entrySet();
set.stream();
方式二:
Map map=new HashMap();
Set set=map.values();
set.stream();
Set set1=map.keySet();
set1.stream();
3.通过数组获取流:
A).通过引用类型数组获取流:
Integer[] arr1 = {1,2,3,4};
String[] arr2 = {"a","b","c"};
//1.获取Integer[]数组的流
Stream<Integer> integerStream = Stream.of(arr1);
//2.获取String[]数组的流
Stream<String> stringStream = Stream.of(arr2);
B).通过基本类型数组获取流:
int[] arr = {1,2,3,4};
IntStream s1 = IntStream.of(arr);
四. Stream流_常用方法_逐一处理forEach
1.伪代码:
class Stream流的子类<T>{
//所有元素
public void forEach(Consumer<T> c){
//1.遍历每个元素
for(T t : 所有元素){
//3.将每个元素放到Consumer的accept()方法过一下
c.accept(t);
}
}
}
2.只需要重写Consumer接口中的accept方法即可,并传入forEach,forEach参数可以是匿名内部类,lambda或者方法引用
五. Stream流_常用方法_过滤filter
Stream<T> |
filter?(Predicate<? super T> predicate) |
针对相应条件对流中数据进行过滤,过滤的代码只要重写Predicate接口中test方法即可,test方法返回值为boolean类型,对于返回false的元素过滤出去
六. Stream流_常用方法_统计个数count
针对流的操作,统计流中元素的个数并返回long类型值,调用count方法不需要传入参数
七. Stream流_常用方法_取用前几个limit
取流中前几个元素,limit方法参数为int类型,代表元素个数, 重新返回一个新流
八. Stream流_常用方法_跳过前几个skip
取流中第n个元素以及之后的数据,limit方法参数为int类型,代表跳过元素个数,重新返回一个新流
九. Stream流_常用方法_映射(转换)map
<R> Stream<R> |
map?(Function<? super T,? extends R> mapper) |
调用map方法需要传入函数接口Function或者其子类
定义Function时一般会指定两个泛型,前一个泛型为流中元素类型,后一个泛型代表转换后的元素类型
进行类型转换,传入一个类型,返回另一个类型,
十. Stream流_常用方法_合并concat
concat方法用于将两个流合并成一个流,Stream中的静态方法,调用需要传入两个流参数,返回一个新流
十一. Stream流_总结_拼接方法与终结方法
1).拼接方法:这个方法会返回一个Stream流,可以继续对这个流操作。
2).终结方法:这个方法返回的是最终的值。不是Stream流,不能对流继续操作。
十二. Stream流_常用方法_收集Stream结果collect方法
1).“Stream流”其实是一个集合元素的函数模型,它并不是集合,也不是数据结构,其本身并不存储任何元素(或其地址值)。
2).有些时候,我们使用Stream过滤元素后,过滤后的元素时存储在一个新流中,我们希望将这些数据存储到一个新的集合中,
此时,可以将Stream转换为各种集合:
3).转换为List集合
Stream<String> stream = ....;
//转换为List集合
List<String> list = stream.collect(Collectors.toList());
转换为Set集合
Set<String> set = stream.collect(Collectors.toSet());
转换为数组:
Object[] objArray = stream.toArray();
原文链接:https://www.cnblogs.com/aihuadung/p/10783955.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:Java笔记(day12)
- 国外程序员整理的Java资源大全(全部是干货) 2020-06-12
- 2020年深圳中国平安各部门Java中级面试真题合集(附答案) 2020-06-11
- 2020年java就业前景 2020-06-11
- 04.Java基础语法 2020-06-11
- Java--反射(框架设计的灵魂)案例 2020-06-11
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash