关于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方面的接入,一般来说,渠道是非常多的,每一个渠道调用的接口都不一致,如果每一个渠道都要自己去弄回非常的耗时,所以网上会有一些接入的中间件提供商 ...
随机推荐
- OpenCV3编程入门-读书笔记1
一.OpenCV概述 1.OpenCV全程Open Source Computer Vision Library,即开源计算机视觉库.它是一个跨平台的开源计算机视觉库,可以运行在windows.lin ...
- iOS -- Effective Objective-C 阅读笔记 (9)
// 将类的实现方法代码反三到便于管理的数个分类之中. // 类中经常容易填满各种方法, 而这些方法的代码则全部堆在一个巨大的实现文件中, 有时这么做事不合理的,因为即使通过重构把这个类 ...
- matplotlib学习笔记
1.简介 matplotlib是python的一个2D绘图库,它可以在不同平台上地使用多种通用的绘图格式(hardcopy formats)和交互环境绘制出出版物质量级别的图片.matplotlib可 ...
- OrCAD Capture CIS 16.6 为原理图中的Off-Page Connector添加页面编号
操作系统:Windows 10 x64 工具1:OrCAD Capture CIS 16.6-S062 (v16-6-112FF) 为原理图中的Off-Page Connector添加页面编号 一般来 ...
- Centos查看系统CPU个数、核心数、线程数
1.查看 CPU 物理个数 grep 'physical id' /proc/cpuinfo | sort -u | wc -l 2.查看 CPU 核心数量 grep 'core id' /proc/ ...
- Emacs Org-mode 1 下载、安装、基本使用
1.1 总述 Org 是一种帮助我们做笔记.日常事件或者项目计划的快速高效的文本格式系统. Org 有以下特点: Org mode 基于组织结构(outline-mode)对文本进行组织.具有良好的快 ...
- + CategoryInfo : NotSpecified: (:) [], PSSecurityException + FullyQualifiedErrorId : RuntimeException
File C:\Users\danv\Documents\WindowsPowerShell\profile.ps1 cannot be loaded because the execution of ...
- vue 获取dom的css属性值
<template> <div id="topInfo" ref="topInfo" style="width: 200px;hei ...
- 3.基于梯度的攻击——PGD
PGD攻击原论文地址——https://arxiv.org/pdf/1706.06083.pdf 1.PGD攻击的原理 PGD(Project Gradient Descent)攻击是一种迭代攻击,可 ...
- 思维导图工具XMind
思维导图工具XMind XMind简单介绍 官网地址:https://www.xmind.cn/ XMind 是一个全功能的思维导图和头脑风暴软件,为激发灵感和创意而生.作为一款有效提升工作和生活效率 ...