java8 用法小结
一 简单的stream
parallelStream慎用,除非你知道它内部干了什么
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8);
list.parallelStream().forEach(System.out::println);
list.parallelStream().forEachOrdered(System.out::println);
6
5
7
8
3
1
4
2
---------
1
2
3
4
5
6
7
8
输出结果
二 简单的stream, collect, sum, count, groupBy, partition
假设有一个这样的对象流:
+----------+------------+-----------------+
| Name | Age | Address |
+----------+------------+-----------------+
| aa | 11 | shanghai |
| bb | 61 | beijing |
| cc | 30 | dalian |
| dd | 90 | dalian |
+----------+------------+-----------------+ (1)初始化
List<User> userList = Stream.of(
new User("aa", 11, "shanghai"),
new User("bb", 61, "beijing"),
new User("cc", 30, "dalian"),
new User("dd", 90, "dalian")
).collect(Collectors.toList());
(2)取某一字段 stream & collect
System.out.println(userList.stream().map(User::getAddress).collect(Collectors.toList()));
System.out.println("---------");
ArrayList<String> arrayList = userList.stream().map(User::getAddress).collect(Collectors.toCollection(ArrayList::new));
System.out.println(arrayList);
System.out.println("---------");
System.out.println(userList.stream().map(User::getAddress).collect(Collectors.joining("@@")));
[shanghai, beijing, dalian, dalian]
---------
[shanghai, beijing, dalian, dalian]
---------
shanghai@@beijing@@dalian@@dalian
输出结果
(3)取总和 sum
System.out.println(userList.stream().mapToInt(User::getAge).sum());
192
输出结果
(3)分组
Map<String, List<User>> addressMap = userList.stream().collect(Collectors.groupingBy(User::getAddress));
System.out.println(addressMap);
{shanghai=[User[name=aa,address=shanghai]], dalian=[User[name=cc,address=dalian], User[name=dd,address=dalian]], beijing=[User[name=bb,address=beijing]]}
输出结果
(4)分组取和,平均数
Map<String, Long> addressCountMap = userList.stream().collect(Collectors.groupingBy(User::getAddress, Collectors.counting()));
System.out.println(addressCountMap); Map<String, Double> map = userList.stream().collect(Collectors.groupingBy(User::getAddress, Collectors.averagingInt(User::getAge)));
System.out.println(map);
{shanghai=1, dalian=2, beijing=1}
{shanghai=11.0, dalian=60.0, beijing=61.0}
输出结果
(5)分区 分区是一种特殊的分组,结果 map 至少包含两个不同的分组——一个true,一个false
Map<Boolean, List<User>> partitionMap = userList.stream().collect(Collectors.partitioningBy(user -> Objects.equals(user.getAddress(), "beijing")));
System.out.println(partitionMap);
System.out.println(partitionMap.get(true)); Map<Boolean, Map<String, Long>> partitionGroupByMap = userList.stream()
.collect(Collectors.partitioningBy(user -> user.getAge() < 70, Collectors.groupingBy(User::getAddress, Collectors.counting())));
System.out.println(partitionGroupByMap);
{false=[User[name=aa,address=shanghai], User[name=cc,address=dalian], User[name=dd,address=dalian]], true=[User[name=bb,address=beijing]]}
[User[name=bb,address=beijing]]
{false={dalian=1}, true={shanghai=1, dalian=1, beijing=1}}
输出结果
java8 用法小结的更多相关文章
- 转载:Hadoop排序工具用法小结
本文转载自Silhouette的文章,原文地址:http://www.dreamingfish123.info/?p=1102 Hadoop排序工具用法小结 发表于 2014 年 8 月 25 日 由 ...
- [No000010]Ruby 中一些百分号(%)的用法小结
#Ruby 中一些百分号(%)的用法小结 #这篇文章主要介绍了Ruby 中一些百分号(%)的用法小结,需要的朋友可以参考下 what_frank_said = "Hello!"#% ...
- C++ typedef用法小结 (※不能不看※)
C++ typedef用法小结 (※不能不看※) 第一.四个用途 用途一: 定义一种类型的别名,而不只是简单的宏替换.可以用作同时声明指针型的多个对象.比如:char* pa, pb; // 这多数不 ...
- 函数fgets和fputs、fread和fwrite、fscanf和fprintf用法小结 (转)
函数fgets和fputs.fread和fwrite.fscanf和fprintf用法小结 字符串读写函数fgets和fputs 一.读字符串函数fgets函数的功能是从指定的文件中读一个字符串到字符 ...
- 1:CSS中一些@规则的用法小结 2: @media用法详解
第一篇文章:@用法小结 第二篇文章:@media用法 第一篇文章:@用法小结 这篇文章主要介绍了CSS中一些@规则的用法小结,是CSS入门学习中的基础知识,需要的朋友可以参考下 at-rule ...
- 英语语法最终珍藏版笔记- 21it 用法小结
it 用法小结 it 在英语中的意思较多,用法较广,现总结如下. 一.it作句子的真正主语 1.it 指前面已经提到过的人或事物,有时指心目中的或成为问题的人或事物,作真正主语. 例如: What’s ...
- [转]ssh常用用法小结
ssh常用用法小结 1.连接到远程主机: 命令格式 : ssh name@remoteserver 或者 ssh remoteserver -l name 说明:以上两种方式都可以远程登录到远程主机, ...
- 结构体定义 typedef struct 用法详解和用法小结
typedef是类型定义的意思.typedef struct 是为了使用这个结构体方便.具体区别在于:若struct node {}这样来定义结构体的话.在申请node 的变量时,需要这样写,stru ...
- typedef用法小结
typedef用法小结- - 注意:本文转自网络,版权归原作者所有. typedef typedef用法小结- - 这两天在看程序的时候,发现很多地方都用到typedef,在结构体定义,还有一些数组等 ...
随机推荐
- 「CF724G」Xor-matic Number of the Graph「线性基」
题意 求所有点对\(u,v\),\(u\)到\(v\)所有不同的异或路径的异或值之和,对\(10^9+7\)取模 题解 求出一个dfs树,那么\(u\)到\(v\)的路径一定是树上路径异或一些环.这些 ...
- a a[0] &a &a[0]的理解
数组中几个关键符号(a a[0] &a &a[0])的理解(前提是 int a[10])(1)这4个符号搞清楚了,数组相关的很多问题都有答案了.理解这些符号的时候要和左值右值结合起来, ...
- PHP反序列化学习
在理解这个漏洞前,你需要先搞清楚php中serialize(),unserialize()这两个函数. 序列化serialize() 序列化说通俗点就是把一个对象变成可以传输的字符串,比如下面是一个对 ...
- bypass disable_function总结学习
通常bypass的思路如下 1. 攻击后端组件,寻找存在命令注入的.web 应用常用的后端组件,如,ImageMagick 的魔图漏洞.bash 的破壳漏洞 2. 寻找未禁用的漏网函数,常见的执行命令 ...
- Linux设备驱动程序 之 内核符号表
insmod使用公共内核符号表来解析模块中未定义的符号.功能内核符号表中包含了所有全局内核项(函数和变量)的地址,这是实现模块化驱动程序所必须的.当模块装载到内核后,它所导出的任何符号都会变成内核符号 ...
- js创建链表
首先要明确,我们为什么要创建链表呢?数组的大小是固定的,从数组的起点或中间插入或移除的成本很高,因为需要移动元素.尽管JS的Array类方法可以做这些,但是情况也是这样.链表存储有序的元素集合,但不同 ...
- mac安装phpmysql
1.百度搜“phpmadmin”,还是一样,第二个因为是PC版本,不能用,点击第一个连接,去phpmyadmin的官网. 2.下载完毕后,进入到下载文件保存目录,双击压缩包,压缩包则会自动解压. 3. ...
- linux如何将某个用户加入到其它组?
答: 在Ubuntu下可以使用以下命令添加: sudo usermod -a -G <group_name> <user_name> 注意: 如何生效呢? 需要重新登陆系统 ...
- 自定义nagios监控脚本---磁盘检测
自定义nagios监控脚本---磁盘检测 1. 在客户端上创建脚本/usr/local/nagios/libexec/check_disk.shvim /usr/local/nagios/libexe ...
- python同时执行两个函数
使用两个线程同时执行两个函数, def fun1(): while True: time.sleep(2) print("fun1") def fun2(): while True ...