Java 8 Stream API实例
一、开篇
- Stream?其实就是处理集合的一种形式,称之为流,在Java8中被引入,可被Collection中的子类调用。
- 作用?简化代码,提升你的开发效率。
- 不会?看完这篇你就能自己上手了!
二、实例
首先将你的集合处理成流,才可以使用此API。
Stream<String> stream = list.stream();
接下来创建一个String类型的List,便于测试。
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
list.add(7);
list.add(4);
list.add(6);
接下来展示具体参数使用方式。
- filter 过滤
例:需要过滤出在集合中,大于5的数字的集合。
List<Integer> result = list.stream().filter(o -> o>5).collect(Collectors.toList());
filter内部使用的是lamda表达式,也是Java8的功能,o代表集合中每一个元素,o>5表示这个元素的值若大于5就返回true,就获取结果。collect表示聚合,Collectors.toList()表示将结果聚合到一个List集合。
- map 形成一个新对象
例:需要将集合内的元素全部转换成String类型。
List<String> result = list.stream().map(o->String.valueOf(o)).collect(Collectors.toList());
- sort 排序
例: 需要从小到大排序。
List<Integer> result = list.stream().sorted().collect(Collectors.toList());
例: 需要从大到小排序。
List<Integer> result = list.stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList());
- forEach 遍历
例: 打印集合内每个元素。
list.stream().forEach(o->System.out.println(o));
list.forEach(o->System.out.println(o));
- distinct 去除重复元素
List<Integer> result = list.stream().distinct().collect(Collectors.toList());
- reduce 集合内运算
例: 计算集合中元素的和。
Integer sum = list.stream().reduce(0, (i, j) -> i + j);
reduce中第一个参数为基数,即为初始值,i,j的定义为第一个和第二个操作数,i+j即为操作,此处为加法操作。
如果计算乘法,就不能设置初始值为0,因为0乘任何数都为0。
- collect 聚合成Collection
- Collectors.toMap(Function<? super T, ? extends K> keyMapper, Function<? super T, ? extends U> valueMapper)
- Collectors.toList()
- Collectors.toSet()
- ...
例: 将list聚合成一个key为元素,value为“item”+元素的Map。
Map<Integer, String> map = list.stream().collect(Collectors.toMap(Function.identity(), o -> String.format("item%s", o)));
结果:{1=item1, 2=item2, 3=item3, 4=item4, 6=item6, 7=item7}
keyMapper表示设置为key的规则,valueMapper表示设置为value的规则。
Function.identity()表示当前本身元素。
- groupBy 分组
Collectors.groupingBy(Function<? super T, ? extends K> classifier)
新建一个User实体,有姓名和年龄两个字段,并初始化一个集合便于测试。
List<User> list = new ArrayList<User>();
list.add(new User("与李", 18));
list.add(new User("CSDN", 19));
list.add(new User("han", 20));
list.add(new User("han", 21));
例: 需要把名字相同的实体提出来放在一起,形成一个List集合。
Map<String, List<User>> group = list.stream().collect(Collectors.groupingBy(User::getName));
结果:{han=[User [name=han, age=20], User [name=han, age=21]], CSDN=[User [name=CSDN, age=19]], 与李=[User [name=与李, age=18]]}
此处使用User实体的name属性进行分组。
User::getName 与 o -> o.getName() 含义相同,两者皆可传入。
- partitioningBy 分区
Collectors.partitioningBy(Predicate<? super T> predicate)
例: 分别统计年龄大于等于20和小于20的学生信息
Map<Boolean, List<User>> partitioning = list.stream().collect(Collectors.partitioningBy(o -> o.getAge() >= 20));
结果:{false=[User [name=与李, age=18], User [name=CSDN, age=19]], true=[User [name=han, age=20], User [name=han, age=21]]}
可以看到返回结果是一个Map<Boolean, List>,利用partitioningBy后生成的map,有且仅有两个元素,key固定为true和false,分别表示满足条件的信息和不不满足条件的信息。
三、结尾
此文列举了Stream部分方法的使用,具体更多的方法需要自己去深入了解。通过熟悉使用Stream的api之后,你会对它的处理方式爱不释手。
Java 8 Stream API实例的更多相关文章
- Java 8 Stream API详解--转
原文地址:http://blog.csdn.net/chszs/article/details/47038607 Java 8 Stream API详解 一.Stream API介绍 Java8引入了 ...
- Java 8 Stream API
Java 8 Stream API JDK8 中有两大最为重要的改变.第一个是 Lambda 式:另外 Stream API(java.util.stream.*) Stream 是 JDK8 中处理 ...
- Java 8 Stream API具体解释
Java 8 Stream API具体解释 一.Stream API介绍 Java 8引入了全新的Stream API,此Stream与Java I/O包里的InputStream和OutputStr ...
- Java 8 Stream API Example Tutorial
Stream API Overview Before we look into Java 8 Stream API Examples, let’s see why it was required. S ...
- Java 8 Stream Api 中的 peek 操作
1. 前言 我在Java8 Stream API 详细使用指南[1] 中讲述了 [Java 8 Stream API]( "Java 8 Stream API") 中 map 操作 ...
- Java 8 Stream API的使用示例
前言 Java Stream API借助于Lambda表达式,为Collection操作提供了一个新的选择.如果使用得当,可以极大地提高编程效率和代码可读性. 本文将介绍Stream API包含的方法 ...
- Java 8 Stream API 详解
Java 8 中的 Stream 是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利.高效的聚合操作(aggregate operation),或者大批量数据操作 (b ...
- Java 使用 Stream API 筛选 List
前言 上课的时候看到老师用迭代器来遍历 List 中的元素的时候,我的内心是极其嫌弃的,这种迭代方法不能直接访问当前的元素,而且写起来也麻烦.于是上网查了查 Java 有没有类似于 Linq 的东西, ...
- Spring WebFlux 学习笔记 - (一) 前传:学习Java 8 Stream Api (3) - Stream的终端操作
Stream API Java8中有两大最为重要的改变:第一个是 Lambda 表达式:另外一个则是 Stream API(java.util.stream.*). Stream 是 Java8 中处 ...
随机推荐
- 使用 VMware Workstation Pro让 PC 提供云桌面服务——学习笔记(三)
目标 当在前面两篇博客后,我们已经创建了一个能当服务器的虚拟机,这时我们需要通过复制虚拟机来让创建更多虚拟机 操作步骤 1.创建克隆 这里主要是VMware软件的操作 虚拟机->管理->克 ...
- CTF bossplayers 靶机
WAYs: robots.txt文件提供线索,命令执行漏洞获得反弹shell suid命令提升权限 1:netdiscover 发现主机地址192.168.1.109 2:使用namp进行端口扫描发现 ...
- 什么是P,NP和NPC问题?
P问题,NP问题,NPC问题?这些都是计算机科学领域,关于算法方面的术语.在认识这些术语之前,建议同学们先认真学习一下算法的时间复杂度,因为算法的时间复杂度与P,NP和NPC问题高度相关. 什么是P问 ...
- 洛谷P1057 传球游戏 完美错觉(完美错解)
//作者:pb2 博客:https://www.luogu.com.cn/blog/pb2/ 或 http://www.cnblogs.com/p2blog //博客新闻1:"WPS开机自启 ...
- 一文说通Jwt、Session、Cooike区别
JWT 全称是 JSON Web Token,是目前非常流行的跨域认证解决方案,在单点登录场景中经常使用到. 有些人觉得它非常好用,用了它之后就不用在服务端借助 redis 实现认证过程了,但是,还有 ...
- 操作系统-存储管理(3)高速缓存Cache
存储器的组织形式: 数据总是在相邻两层之间复制传送,最小传送单位是定长块,互为副本(不删除) ️指令和数据有时间局部性和空间局部性. 高速缓冲存储器Cache 介于CPU和主存储器间的高速小容量存 ...
- 第三篇Scrum冲刺博客--Interesting-Corps
第三篇Scrum冲刺博客 站立式会议 1.会议照片 2.队友完成情况 团队成员 昨日完成 今日计划 鲍鱼铭 主页页面跳转社区功能及社区设计及布局实现 搜索页面跳转.设计及布局实现 叶学涛 编写个人页面 ...
- 使用grub2引导进入Linux或Window系统
很多人在一通烂搞之后把自己的grub搞崩了(比如我当时手贱删除了boot分区)虽然后来又装了grub,但是进入grub后还是没有引导,只有一个孤零零的命令行界面 这时候应该怎么办呢?首先当然是想进入系 ...
- zookeeper基本配置以及一些坑
配置 1. 解压安装包:tar zxvf zookeeper-3.4.14.tar.gz 2. 修改zookeeper配置: #Master cd zookeeper-3.4.14 #创建日志文件夹及 ...
- 运用sed命令高效地删除文件的特定行
运用 sed 命令高效地删除文件的特定行 正常来说,我们想要删除文件中的某些行内容,一般都是先打开这个文件,然后找到要删除的内容,再然后选中这些行并按删除键进行删除,这在数据量很少时是没有问题的.但是 ...