Java Stream流式计算:Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。

Stream API可以极大提高Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。
这种风格将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选, 排序,聚合等。
元素流在管道中经过中间操作(intermediate operation)的处理,最后由最终操作(terminal operation)得到前面处理的结果。

以上的流程转换为 Java 代码为:

List<Integer> transactionsIds =
widgets.stream().filter(b -> b.getColor() == RED).sorted((x,y) -> x.getWeight() - y.getWeight()).mapToInt(Widget::getWeight).sum();

flatMap(对流扁平化处理)

使用flatMap方法的效果是,各个数组并不是分别映射一个流,而是映射成流的内容,所有使用map(Array::stream)时生成的单个流被合并起来,即扁平化为一个流。

Company类:

package 任务十三__流式计算;import java.util.List;/*** @author ${范涛之}* @Description* @create 2021-12-01 21:11*/
public class Company<T> {public  enum Type {BIG,SMALL};private String name ;private Type type;private List<T> employees;public Company(String name, Type type, List<T> employees) {this.name = name;this.type = type;this.employees = employees;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Type getType() {return type;}public void setType(Type type) {this.type = type;}public List<T> getEmployees() {return employees;}public void setEmployees(List<T> employees) {this.employees = employees;}@Overridepublic String toString() {return  this.name;}}

Employee类:

package 任务十三__流式计算;/*** @author ${范涛之}* @Description* @create 2021-12-01 21:18*/
public class Employee {public enum Type {MANAGER, SELLER, OFFICER};private String name;private String genger;private Integer age;private boolean married;private Type type;public Employee(String name, String genger, Integer age, boolean married, Type type) {super();this.name = name;this.genger = genger;this.age = age;this.married = married;this.type = type;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getGenger() {return genger;}public void setGenger(String genger) {this.genger = genger;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public boolean isMarried() {return married;}public void setMarried(boolean married) {this.married = married;}public Type getType() {return type;}public void setType(Type type) {this.type = type;}@Overridepublic String toString() {final StringBuffer sb = new StringBuffer("Employee{");sb.append("name='").append(name).append('\'');sb.append(", genger='").append(genger).append('\'');sb.append(", age=").append(age);sb.append(", married=").append(married);sb.append(", type=").append(type);sb.append('}');return sb.toString();}
}

测试类:

package 任务十三__流式计算;import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;/*** @author ${范涛之}* @Description* @create 2021-12-01 21:24*/
public class Test {public static void main(String[] args) {List<Company<Employee>> list = new ArrayList<>();List<Employee> employees = Arrays.asList(new Employee("张勇", "男", 28, true, Employee.Type.MANAGER),new Employee("李强", "男", 22, false, Employee.Type.SELLER),new Employee("王武", "男", 32, false, Employee.Type.SELLER),new Employee("梅丽", "女", 26, true, Employee.Type.OFFICER),new Employee("郑帅", "男", 29, false, Employee.Type.OFFICER),new Employee("曾美", "女", 27, true, Employee.Type.SELLER),new Employee("郝俊", "男", 22, true, Employee.Type.SELLER),new Employee("方圆", "女", 24, false, Employee.Type.SELLER));Company<Employee> moubao = new Company<Employee>("某宝", Company.Type.BIG, employees);employees = Arrays.asList(new Employee("吴琼", "女", 27, true, Employee.Type.SELLER),new Employee("陈辰", "女", 20, false, Employee.Type.OFFICER),new Employee("刘能", "男", 25, true, Employee.Type.OFFICER),new Employee("周七", "男", 29, false, Employee.Type.OFFICER),new Employee("汪旺", "男", 21, false, Employee.Type.OFFICER),new Employee("胡涂", "男", 27, false, Employee.Type.OFFICER),new Employee("杨茂", "男", 34, true, Employee.Type.MANAGER),new Employee("朱坚", "男", 30, false, Employee.Type.MANAGER));Company<Employee> mouxin = new Company<>("某东", Company.Type.BIG, employees);employees = Arrays.asList(new Employee("冯过", "男", 35, false, Employee.Type.SELLER),new Employee("何花", "女", 27, false, Employee.Type.MANAGER),new Employee("卫精", "男", 25, true, Employee.Type.OFFICER),new Employee("施工", "男", 28, false, Employee.Type.OFFICER),new Employee("沈月", "女", 24, false, Employee.Type.OFFICER),new Employee("乐欢", "女", 22, false, Employee.Type.OFFICER),new Employee("安全", "男", 33, true, Employee.Type.MANAGER),new Employee("林森", "男", 26, true, Employee.Type.SELLER));Company<Employee> mouhaha = new Company<>("某哈哈", Company.Type.SMALL, employees);list.add(moubao);list.add(mouxin);list.add(mouhaha);}}

然后开始分析需求写流:统计公司类型为 BIG 的所有未婚员工,同时按年龄排序,并且未婚员工不区分公司,也就是最终结果放在一个列表中

首先1:返回的是筛选后的员工,所以我们要定义一个数组用来存放返回的结果:

      List<Employee> result = list.stream

2:然后开始筛选:首先使用flatMap合并流,然后根据条件筛选,

List<Employee> result = list.stream().flatMap(company -> company.getEmployees().stream()).filter(employee -> !employee.isMarried()).sorted(Comparator.comparing(Employee::getAge)).collect(Collectors.toList());for (Employee emp :result){System.out.println(emp.toString());}

最后打印输出:

java流式计算学习笔记相关推荐

  1. Steram流式计算学习笔记

    Steram流式计算 一.概述 说到Stream便容易想到 I/O Stream,而实际上,谁规定"流"就一定是"I0流"呢 ?在Java 8中,得益于Lamb ...

  2. java流式接口,JAVA流式计算

    JAVA流式计算 流的简单介绍 Java 8 中,引入了流(Stream)的概念,利用提供的Stream API,我们可以方便的操作集合数据,这种方式很类似于使用SQL对数据库的操作. 如何生成流 利 ...

  3. 【Java】流式编程学习笔记

    文章目录 一.流简介 二.创建流 2.1 由值创建流:of 2.2 由列表创建流:stream 2.3 由 Builder 创建流:build 2.4 由文件生成流:lines 2.5 由函数生成流 ...

  4. java 流式_Java开发笔记(七十二)Java8新增的流式处理

    通过前面几篇文章的学习,大家应能掌握几种容器类型的常见用法,对于简单的增删改和遍历操作,各容器实例都提供了相应的处理方法,对于实际开发中频繁使用的清单List,还能利用Arrays工具的asList方 ...

  5. java 流计算_JAVA流式计算

    JAVA流式计算 流的简单介绍 Java 8 中,引入了流(Stream)的概念,利用提供的Stream API,我们可以方便的操作集合数据,这种方式很类似于使用SQL对数据库的操作. 如何生成流 利 ...

  6. java学习笔记20(Lambda表达式、函数式编程、流式计算、练习)

    文章目录 11.3 学习内容 Lambda表达式 Lambda标准格式 格式说明 省略规则 使用前提 函数式接口 预定义的函数式接口 工作内容 任务1 总结&明日计划 11.4 学习内容 流式 ...

  7. 【Java】函数式编程学习笔记——Stream流

    学习视频:https://www.bilibili.com/video/BV1Gh41187uR?p=1 (1)[Java]函数式编程学习笔记--Lambda表达式 (2)[Java]函数式编程学习笔 ...

  8. 流式计算strom,Strom解决的问题,实现实时计算系统要解决那些问题,离线计算是什么,流式计算什么,离线和实时计算区别,strom应用场景,Strorm架构图和编程模型(来自学习资料)

    1.背景-流式计算与storm 2011年在海量数据处理领域,Hadoop是人们津津乐道的技术,Hadoop不仅可以用来存储海量数据,还以用来计算海量数据.因为其高吞吐.高可靠等特点,很多互联网公司都 ...

  9. 超级实习生计划学习打卡——流式计算

    学习内容 流式计算 Stream,也就是流,也叫做流式计算.利用 Steam ,可以让 java 以声明性地迭代方式处理集合. 元素是特定类型的对象,形成一个队列. Stream并不会存储元素,而是按 ...

最新文章

  1. 使用Docker快速搭建PHP开发环境
  2. element 如何自定义svg图标_4000+免费可自定义的图标集合
  3. Android开发 - 掌握ConstraintLayout(四)创建基本约束
  4. Ethercat解析(十)之从站配置
  5. 电脑突然出现成功连接网络但不能上网、网络受限(解决办法)
  6. 【Visual C++】游戏开发笔记四十三 浅墨DirectX教程十一 为三维世界添彩:纹理映射技术(二)
  7. 51JOB:根据HR处理简历的一般流程,简历投递后会有如下几种状态出现
  8. python两个csv表数据合并_python – 根据列中的数据合并两个CSV文件
  9. [编程题]:n头牛中选择满足所有m种特性的牛(百度2021)
  10. 零售商商品管理系统——需求分析
  11. WPF编程;上位机编程;C#编程;仿QQ基础实现(一)之界面预览
  12. HUAWEI机试:最长的顺子
  13. 【立创EDA开源推荐】09期基于ESP32的物联网时钟
  14. insufficient data written 错误
  15. 作为产品助理的这一年
  16. python pca降维图_热力图和PCA降维图
  17. 重庆大学教授向宏:360扣扣保镖不是病毒和间谍软件
  18. win7系统如何加速计算机启动,win7电脑怎么提速_win7电脑提速方法-win7之家
  19. 手写数字识别模型识别自己的图片
  20. MAC OS X Wifi不稳定的解决办法(包括IPad2)

热门文章

  1. win10磁贴自定义_如何在Windows 10开始菜单上添加,删除和自定义磁贴
  2. 软件理论基础学习笔记——命题逻辑系统
  3. idea打字变成繁体字
  4. 三节锂电池充电管理芯片,IC电路图,BOM物料表
  5. Matlab 高光谱遥感数据处理与混合像元分解
  6. 关于学习C语言的心得体会吧!
  7. 什么是高防服务器?服务器被攻击了怎么办?
  8. 解决办法 Field userService in com.sxsj.controller.RegistLoginController required a bean of type
  9. [C/C++学习] C/C++中的六大遍历
  10. 微信支付的回调函数实现验签以及解密