Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。Stream API可以极大提高Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。这种风格将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选, 排序,聚合等。

流的API较多,有一些使用起来还是有一定的理解成本。为了方便大家理解,本文通过具体的示例进行总结。欢迎大家讨论交流。

下面是例子中的对象,不考虑字段的实际意义,只是为了方便演示。

public class UserPo {private Long id;private String name;private Integer age;private Long imageFileId1;private Long imageFileId2;//... 省略 get,set,hashCode和equals
}UserPo userPo1=new UserPo(1L,"user1",10,100L,101L);
UserPo userPo2=new UserPo(2L,"user2",20,200L,201L);List<UserPo> userPoList= Arrays.asList(userPo1,userPo2);

生成流

这里只介绍两种方式:手动创建,使用集合创建

1、手动创建

Stream<UserPo> userPoStream = Stream.of(userPo1,userPo2);

2、集合创建

Stream<UserPo> userPoStream = userPoList.stream();

map操作

map可以理解为转换操作,对每一个对象进行转换。

//提取对象中的某一个属性值的集合(把每一个对象转化为某一个属性值)Set<String> nameSet = userPoList.stream().map(e -> e.getName()).collect(Collectors.toSet());

flatMap操作

flatmap一直有点不太好理解。

先看一个具体的问题,上面map操作中,生成了包含所有名称的nameSet集合。

如果要获取对象中的所有的fileId,每个对象中包含imageFileId1,imageFileId2。最终的结果应该是生成包含了{100,101,200,201}四个元素的集合。

Set<Long> fileIdSet = userPoList.stream().flatMap(e -> Stream.of(e.getImageFileId1(), e.getImageFileId2())).collect(Collectors.toSet());

flatMap方法接受一个lambda表达式函数, 函数的返回值必须也是一个stream类型,flatMap方法最终会把所有返回的stream合并。

list转map

把userPoList  ==>  map<key/*id*/,value/*UserPo*/>,这也是一个经常使用的操作

//如果key重复,则仅保留第一个userPo
Map<Long, UserPo> userPoMap = userPoList.stream().collect(Collectors.toMap(UserPo::getId, e -> e, (v1, v2) -> v1));

把userPoList  ==>  map<key/*id*/,List<value>/*UserPo*/>,聚合操作,按照某一个属性值。例如把按照年龄进行归类

Map<Integer, List<UserPo>> ageMap =userPoList.stream().collect(Collectors.groupingBy(UserPo::getAge));

sorted操作

排序也是一个经常使用的操作

List<UserPo> ageSort = userPoList.stream().sorted(Comparator.comparing(UserPo::getAge)).collect(Collectors.toList());

filter操作

filter过滤不符合条件的对象

Set<UserPo> filterAge = userPoList.stream().filter(userPo -> userPo.getAge() > 10).collect(Collectors.toSet());

JAVA8 stram 实战相关推荐

  1. idea重写接口没有@override_乐字节|Java8核心实战-接口默认方法

    JAVA8已经发布很久,是自java5(2004年发布)之后Oracle发布的最重要的一个版本.其中包括语言.编译器.库.工具和JVM等诸多方面的新特性,对于国内外互联网公司来说,Java8是以后技术 ...

  2. java8流实战-用流收集数据实践简记

    文章目录 收集器简介 什么是流收集器 一个get start告诉你流收集器的强大之处 流收集器工作原理简析 规约和汇总 查找流中的最大值和最小值 汇总和和一次性获取所有规约结果 连接字符串 关于规约汇 ...

  3. Java8 Stram常用操作

    Java8的新特性主要是Lambda表达式和流,当流和Lambda表达式结合起来一起使用时,因为流申明式处理数据集合的特点,可以让代码变得简洁易读. 流的操作类型主要分为两种: 1.中间操作: 一个流 ...

  4. java8 stram并行流学习

    关于steam基本用法https://www.jianshu.com/p/11c925cdba50这篇博客中已经有了详细的介绍 并行流需要注意的地方: 并行流分解任务基于fork/join 框架 fo ...

  5. Java8 Stram 的使用

    1.Java Stream 详解 http://colobu.com/2016/03/02/Java-Stream/ 2.Java 8 Stream 教程 https://www.jianshu.co ...

  6. java steam 性能_java8 Steam实战

    java8 Steam实战 假定选定一组专辑,找出其中所有长度大于1分钟的曲目名称 public Set findLongTracks(List albums) { HashSet trackName ...

  7. 第7课: bs4 库 的 BeautifulSoup 基础学习

    这里写目录标题 本节课内容所需要安装的 库: BeautifulSoup 简介: lxml 简介: requests ,BeautifulSoup 和 lxml 相互三者关系: 如何利用 bs4 的 ...

  8. 《Java8实战》-第六章读书笔记(用流收集数据-01)

    用流收集数据 我们在前一章中学到,流可以用类似于数据库的操作帮助你处理集合.你可以把Java 8的流看作花哨又懒惰的数据集迭代器.它们支持两种类型的操作:中间操作(如 filter 或 map )和终 ...

  9. 《Java8实战》笔记汇总

    <Java8实战>笔记(01):为什么要关心Java8 <Java8实战>笔记(02):通过行为参数传递代码 <Java8实战>笔记(03):Lambda表达式 & ...

最新文章

  1. 使用es6实现iview的选项卡切换
  2. VTK:创建字母频率的条形图用法实战
  3. nginx location 正则表达式匹配多个地址_就是要让你搞懂Nginx,这篇就够了!
  4. 17年数据分析经验告诉你大数据行业的门道
  5. TypeScript 简介与优势
  6. vue3.0生产环境和正式环境配置_vue开发环境和生产环境配置
  7. python 散点图点击链接图片_在Python和matplotlib中连接三维散点图中的两点
  8. Python中的文件复制
  9. 智能手持设备产品设计“八戒”
  10. snipaste如何滚动截图_别再花时间去找截图软件了,只用考虑这三款!
  11. 【csdn上使用MathType编写公式建议方法】【亲测有效!!!】
  12. 安卓 控件靠右对齐_LinearLayout中组件右对齐
  13. Windows系统管理24招
  14. linux内核计算次方,linux内核bic和cubic实现
  15. oracle profile 参数,oracle profile的参数详解
  16. 逻辑函数的描述工具介绍
  17. 贝尔曼最优方程(Bellman Optimality Equation)
  18. 随机密码生成Python
  19. 以编程方式使用 Microsoft Office Visio 2003 ActiveX 控件(经经经经经典)
  20. ZiSync:跨平台局域网自同步工具

热门文章

  1. 【算法】_015_矩阵乘法_直接递归
  2. 科沃斯机器人“入职”自助办税服务厅
  3. 把文件或者文件夹打包成jar
  4. 查询身份证信息的JAVA实现
  5. python中struct time_python工具模块介绍-time 时间访问和转换!
  6. 裸辞创业,挣了一千万!有钱人,都不想告诉你的5个秘密
  7. 金属有机骨架材料ZIF-8包载姜黄素(ZIF@CCM纳米颗粒)|纳米金属有机框架搭载雷帕霉素|科研试剂
  8. VirtualCalle-虚拟来电恶作剧开源版
  9. 找回wps未保存文件
  10. 概率论06- 离散型随机变量及分布