关于 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的一点记录的更多相关文章

  1. 对Integer类中的私有IntegerCache缓存类的一点记录

    对Integer类中的私有IntegerCache缓存类的一点记录 // Integer类有内部缓存,存贮着-128 到 127. // 所以,每个使用这些数字的变量都指向同一个缓存数据 // 因此可 ...

  2. 从symbol link和hard link 到 unlink函数的一点记录

    之前一直对Linux的文件类型中的 “l” 类型的了解不是很深入,最近经过“圣经”指点,略知一二,在此先记录一下,以便以后查阅,之后会对文件和目录.文件I/O这部分再扩充. 首先需明确,Unix在查阅 ...

  3. 关于删除MySQL Logs的一点记录

    五一前,一个DBA同事反馈,在日常环境中删除一个大的slow log文件(假设文件大小10G以上吧),然后在MySQL中执行flush slow logs,会发现mysqld hang住. 今天尝试着 ...

  4. 关于类属性值校验的一点记录 【知识点Attribute】

    好久没有进来了,之前励志坚持写博客,记录自己在做代码搬运工这段历程中点滴,可是仅仅只坚持了几天,就放弃了!果然是,世上无难事,只要肯放弃!哈哈……闲话不多说,开始进入正题,给自己留点笔记,避免将来老了 ...

  5. 【.Net】关于内存缓存的一点记录

    引言 最近看了内存缓存的一些介绍和用法,在此做个简单记录. MemoryCache 类 MemoryCache 类是.Net 4.0推出的类库,主要是为了方便在Winform和Wpf中构建缓存框架的. ...

  6. 关于db2的一点记录

    近期听搞db2的兄弟说:db2数据库软件的license 不区分平台(os). 先记下来.像db2这么高大上的软件,接触的机会是比較少的. 另外:db2 的license是须要打的,不打的话,超过一段 ...

  7. Nodejs Promise的一点记录

    项目需要,看了点nodejs,其中比较难理解的就是Promise了,记录一下学习bluebird提供的Promise实现. Promise.promisifyAll(obj)方法 作用:把对象的方法属 ...

  8. 关于strlen误用的一点记录

    今天帮一个朋友查一个错误,是运行时报vector iterator incompatible,一般这种问题是向量和迭代器的类型不兼容,或者是进行迭代器判等时前后向量的结构发生变化,如erase操作之后 ...

  9. Android游戏之平台接入的一点记录

    最近手头有需要接入多个渠道的工作,我负责的是Android方面的接入,一般来说,渠道是非常多的,每一个渠道调用的接口都不一致,如果每一个渠道都要自己去弄回非常的耗时,所以网上会有一些接入的中间件提供商 ...

随机推荐

  1. python celery任务分发

    <div id="cnblogs_post_body" class="blogpost-body"><p>Celery是由Python开 ...

  2. if 语句中的判断

    经常写shell的朋友可能已经很熟了.有不同意见的同学请指出来,在这里多谢大家了. bash中如何实现条件判断?条件测试类型:    整数测试    字符测试    文件测试 一.条件测试的表达式: ...

  3. 51nod 1228、1258 序列求和

    这里一次讲两题...貌似都是板子? 所以两题其实可以一起做 [雾 noteskey 总之就是伯努利数的两道入门题啦,就是第二道有点鬼畜了,居然要任意模数的!(好吧是 1e9+7 但也没什么区别了) 伯 ...

  4. ES进阶--04

    第30节彻底掌握IK中文分词_上机动手实战IK中文分词器的安装和使用 之前大家会发现,我们全部是用英文在玩儿...好玩儿不好玩儿...不好玩儿 中国人,其实我们用来进行搜索的,绝大多数,都是中文应用, ...

  5. 最简单有效的关于linux下配置Git操作免登录ssh公钥

    ssh-keygen -t rsa -b 4096 -C “someone@xxx.com” 然后回车三连击… 进入目录(执行cd ~/.ssh),可以看到当前目录下多出两个文件 id_rsa.pub ...

  6. 【sklearn】中文文档

    看不见的叫做远方 飞机票 分类   回归     聚类 降维   模型选择  预处理

  7. oracle查看执行最慢与查询次数最多的sql语句

    前言 在ORACLE数据库应用调优中,一个SQL的执行次数/频率也是常常需要关注的,因为某个SQL执行太频繁,要么是由于应用设计有缺陷,需要在业务逻辑上做出优化处理,要么是业务特殊性所导致.如果执行频 ...

  8. java中的BigDecimal和String的相互转换,int和String的类型转换,Integer类和String相互转换

    一: /*由数字字符串构造BigDecimal的方法 *设置BigDecimal的小数位数的方法 */ 注:BigDecimal在数据库中存的是number类型. import java.math.B ...

  9. Eclipse IDE 添加jar包到Java工程中

    操作系统:Windows 10 x64 工具1:Eclipse Java EE IDE for Web Developers. Version: Photon Release (4.8.0) 在Pac ...

  10. CSS使用小记

    1. 省略显示 max-width: 200px; white-space: nowrap; text-overflow: ellipsis; overflow: hidden; 固定宽度,nowra ...