关于Java8:StreamAPI的一点记录
关于 Stream ,Functional Interface 的一点记录
stream对于集合操作的便捷度提升:
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors; public class ActiveMac { public static void main(String[] args) {
List<Human> humans = new ArrayList<>();
humans.add(new Human("Daniel", 23, "Google"));
humans.add(new Human("Max", 33, "Microsoft"));
humans.add(new Human("Jenny", 18, "Google"));
humans.add(new Human("Alex", 28, "Facebook"));
humans.add(new Human("Charles", 34, "Twitter"));
humans.add(new Human("Roy", 31, "Microsoft")); // 对集合内符合条件的计数
long nums = humans.stream().filter(human -> (human.getAge() > 20)).count();
System.out.println("nums:" + nums); // 对集合内符合条件的筛选输出
List<Human> nameContE = humans.stream().filter(human -> human.getName().contains("e")).collect(Collectors.toList());
System.out.println("nameContainsE:" + nameContE.toString()); // 对集合内元素中元素进行操作
List<Integer> doubleAge = humans.stream().map(human -> human.getAge() * 2).collect(Collectors.toList());
System.out.println("doubleAge:" + doubleAge.toString()); // 对集合内元素分组
Map<String, List<Human>> group = humans.stream().collect(Collectors.groupingBy(Human::getCompany));
System.out.println(group.toString());
}
} class Human {
private String name;
private Integer age;
private String company; public Human(String name, Integer age, String company) {
super();
this.name = name;
this.age = age;
this.company = company;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public Integer getAge() {
return age;
} public void setAge(Integer age) {
this.age = age;
} public String getCompany() {
return company;
} public void setCompany(String company) {
this.company = company;
} @Override
public String toString() {
return name + "-" + age + "-" + company;
}
}
新旧方法的对比:
// 1.对集合内符合条件的计数
long nums = humans.stream().filter(human -> (human.getAge() > 20)).count();
System.out.println(nums); // 2.对集合内符合条件的筛选输出
List<Human> nameContE = humans.stream().filter(human -> human.getName().contains("e")).collect(Collectors.toList());
System.out.println(nameContE.toString()); // 3.对集合内元素中元素进行操作
List<Integer> doubleAge = humans.stream().map(human -> human.getAge() * 2).collect(Collectors.toList());
System.out.println(doubleAge.toString()); // 4.对集合内元素分组
Map<String, List<Human>> group = humans.stream().collect(Collectors.groupingBy(Human::getCompany));
System.out.println(group.toString()); //
int num = 0;
for (Human h : humans) {
if (h.getAge() > 20) {
num++;
}
}
System.out.println(num); //旧方法-循环
//
List<Human> eResult = new ArrayList<>();
for (Human h : humans) {
if (h.getName().contains("e")) {
eResult.add(h);
}
}
System.out.println(eResult.toString()); //
List<Integer> dounleA = new ArrayList<>();
for (Human h : humans) {
Integer newAge = h.getAge() * 2;
dounleA.add(newAge);
}
System.out.println(dounleA.toString()); //
Map<String, List<Human>> maps = new HashMap<>();
for (Human h : humans) {
List<Human> hs = new ArrayList<>();
String key = h.getCompany();
if (maps.containsKey(key)) {
hs = maps.get(key);
}
hs.add(h);
maps.put(key, hs);
}
System.out.println(maps.toString()); }
输出结果方面并不存在差异
新方法-stream
5
[Daniel-23-Google, Jenny-18-Google, Alex-28-Facebook, Charles-34-Twitter]
[46, 66, 36, 56, 68, 62]
{Google=[Daniel-23-Google, Jenny-18-Google], Twitter=[Charles-34-Twitter], Microsoft=[Max-33-Microsoft, Roy-31-Microsoft], Facebook=[Alex-28-Facebook]} 旧方法-循环
5
[Daniel-23-Google, Jenny-18-Google, Alex-28-Facebook, Charles-34-Twitter]
[46, 66, 36, 56, 68, 62]
{Google=[Daniel-23-Google, Jenny-18-Google], Twitter=[Charles-34-Twitter], Microsoft=[Max-33-Microsoft, Roy-31-Microsoft], Facebook=[Alex-28-Facebook]}
其他的下次记录
关于Java8:StreamAPI的一点记录的更多相关文章
- 对Integer类中的私有IntegerCache缓存类的一点记录
对Integer类中的私有IntegerCache缓存类的一点记录 // Integer类有内部缓存,存贮着-128 到 127. // 所以,每个使用这些数字的变量都指向同一个缓存数据 // 因此可 ...
- 从symbol link和hard link 到 unlink函数的一点记录
之前一直对Linux的文件类型中的 “l” 类型的了解不是很深入,最近经过“圣经”指点,略知一二,在此先记录一下,以便以后查阅,之后会对文件和目录.文件I/O这部分再扩充. 首先需明确,Unix在查阅 ...
- 关于删除MySQL Logs的一点记录
五一前,一个DBA同事反馈,在日常环境中删除一个大的slow log文件(假设文件大小10G以上吧),然后在MySQL中执行flush slow logs,会发现mysqld hang住. 今天尝试着 ...
- 关于类属性值校验的一点记录 【知识点Attribute】
好久没有进来了,之前励志坚持写博客,记录自己在做代码搬运工这段历程中点滴,可是仅仅只坚持了几天,就放弃了!果然是,世上无难事,只要肯放弃!哈哈……闲话不多说,开始进入正题,给自己留点笔记,避免将来老了 ...
- 【.Net】关于内存缓存的一点记录
引言 最近看了内存缓存的一些介绍和用法,在此做个简单记录. MemoryCache 类 MemoryCache 类是.Net 4.0推出的类库,主要是为了方便在Winform和Wpf中构建缓存框架的. ...
- 关于db2的一点记录
近期听搞db2的兄弟说:db2数据库软件的license 不区分平台(os). 先记下来.像db2这么高大上的软件,接触的机会是比較少的. 另外:db2 的license是须要打的,不打的话,超过一段 ...
- Nodejs Promise的一点记录
项目需要,看了点nodejs,其中比较难理解的就是Promise了,记录一下学习bluebird提供的Promise实现. Promise.promisifyAll(obj)方法 作用:把对象的方法属 ...
- 关于strlen误用的一点记录
今天帮一个朋友查一个错误,是运行时报vector iterator incompatible,一般这种问题是向量和迭代器的类型不兼容,或者是进行迭代器判等时前后向量的结构发生变化,如erase操作之后 ...
- Android游戏之平台接入的一点记录
最近手头有需要接入多个渠道的工作,我负责的是Android方面的接入,一般来说,渠道是非常多的,每一个渠道调用的接口都不一致,如果每一个渠道都要自己去弄回非常的耗时,所以网上会有一些接入的中间件提供商 ...
随机推荐
- 解决-webkit-box-orient: vertical;(文本溢出)属性在webpack打包后无法编译的问题
在scss里面: /*! autoprefixer: off */-webkit-box-orient: vertical;/* autoprefixer: on */
- codeblocks更改颜色主题
链接:http://www.cnblogs.com/wenbosheng/p/5899483.html
- day01 进制转换与内存分布
今日重点: 1.进制之间的转换 进制:指的是进位的制度.进制主要有二进制.八进制.十六进制等,计算机底层运用的是二进制,为了方便阅读,通常会使用八进制或十六进制进行表示.在32位系统中,通常使用八进制 ...
- Groovy闭包
定义 闭包(Closure)是一种数据类型,它代表一段可执行的代码.它可以作为方法的参数,或者返回值,也可以独立运行,定义如下: def xxx = {parameters -> code} ...
- Maven内置属性
1.内置属性:如${project.basedir}表示项目根目录,${ project.version}表示项目版本 2.POM属性:用户可以引用pom文件中对应的值.如: ${project.bu ...
- SQL入门(1): 创建/查询/更新/连接/视图/SSMS简介
本文介绍SQL的基本查询语句 (1) select... from * 表示全部, 选择的东西还可以进行简单的运算, 可以列别名 select * from student; -sage from ...
- IntelliJ IDEA运行eclipse的web项目报错的问题
用IDEA已经有一段时间了, 由于之前的IDEA版本不支持Tomcat服务器, 所以很长一段时间web项目都是由eclipse开发调试. 今天闲来无事下载了一个最新版的IDEA, 按网上的教程, 尝试 ...
- js的逆向解析
过程: 知道如何寻找登录的接口 知道如何确定js的位置 知道如何观察js的执行过程 知道js的执行方法 1. 确定网站的登录的接口登录的form表单中action对应的url地址通过抓包可以发现,在这 ...
- kubenetes 环境的塔建
最近听我朋友说他们公司准备上云,全线把服务迁到 k8s 上面,一下感觉,我们就 lower 了不少,之前服务器一直跑的就是 docker ,想想弄到 k8s 应该还是没有啥,于是我们也开始改造了 参考 ...
- UOJ#407. 【IOI2018】狼人 Kruskal,kruskal重构树,主席树
原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ407.html 题解 套路啊. 先按照两个节点顺序各搞一个kruskal重构树,然后问题转化成两棵krus ...