学习内容

流式计算
Stream,也就是流,也叫做流式计算。利用 Steam ,可以让 java 以声明性地迭代方式处理集合。

元素是特定类型的对象,形成一个队列。 Stream并不会存储元素,而是按需计算。

流的来源可以是集合,数组 等。

两大特征
Pipelining: 中间操作都会返回流对象本身。 这样多个操作可以串联成一个管道, 如同流式风格(fluent style)。 这样做可以对操作进行优化, 比如延迟执行(laziness)和短路( short-circuiting)。

内部迭代: 以前对集合遍历都是通过Iterator或者增强for的方式, 显式的在集合外部进行迭代,这叫做外部迭代。 Stream提供了内部迭代的方式,流可以直接调用遍历方法。

两大操作
Java8 的 Stream API 中定义了两大类流式操作,一种是中间操作,一种是终端操作。

所谓中间操作,就是类似于流水线上,给上游工序做一些加工和包装,然后再传给自己的下游工序。同样的道理,中间操作流会返回另一个流对象,这个流对象的数据是需要继续传递给后面的流操作处理的。

终端操作就是真正结果的操作,类似于流水线上最后一道工序。

获取流的方式
所有的 Collection 集合都可以通过 stream 默认方法获取流;
Stream 接口的静态方法 of 可以获取数组对应的流。
flatMap 方法
使用flatMap方法的效果是,各个数组并不是分别映射一个流,而是映射成流的内容,所有使用生成的单个流被合并起来,即扁平化为一个流。

例如,将流1:{"H","e","l","l","o"} 与流2:{"W","o","r","l","d"} 用普通方式合并,结果为:{"H","e","l","l","o","W","o","r","l","d"}。

用 flatMap 合并,其结果为:{"H","e","l","o","W","r","d"} 。

工作内容
任务1
除了消费型函数式接口,从搜索引擎或 CSDN 上再分别找一些供给型、映射型和预测型函数式接口的实际应用例子。

package com.xxm.advanced_camp.mission12_FunctionalParadigm;import java.util.Locale;
import java.util.function.*;public class TestTask2 {public static void main(String[] args) {//供给型int arr[] = {24, 12, 34, 87, 5};int maxNum = getMax(() -> {int max = arr[0];for (int x : arr) {if (x > max) {max = x;}}return max;});System.out.println("供给型函数接口测试。数组最大值为:" + maxNum);//消费型printString(s -> System.out.println(s));//映射型toUpper(s -> s.toUpperCase());//预测型lenthLongerThanThree(s -> s.length() > 3);}//供给型,方法public static int getMax(Supplier<Integer> supplier) {return supplier.get();}//消费型,方法public static void printString(Consumer<String> consumer) {consumer.accept("消费型接口测试:HelloWorld");}//映射型,方法public static String toUpper(UnaryOperator<String> function) {String s = function.apply("映射型接口测试:HelloWorld");System.out.println(s);return s.toUpperCase();}//预测型,方法public static void lenthLongerThanThree(Predicate<String> predicate) {boolean longer = predicate.test("HelloWorld");System.out.println("预测型接口测试。字符串 HelloWorld 的长度大于 3 吗?" + longer);}
}

输出结果为:

供给型函数接口测试。数组最大值为:87
消费型接口测试:HelloWorld
映射型接口测试:HELLOWORLD
预测型接口测试。字符串 HelloWorld 的长度大于 3 吗?true

任务2

实现如下需求:统计公司类型为 BIG 的所有未婚员工,同时按年龄排序,并且未婚员工不区分公司,也就是最终结果放在一个列表中(提示:整个需求可以用一行代码完成)

package com.xxm.advanced_camp.mission13_stream;import java.util.*;
import java.util.function.Supplier;
import java.util.stream.Collectors;
import java.util.stream.Stream;public class Task1 {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);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());}}
}

超级实习生计划学习打卡——流式计算相关推荐

  1. CSDN超级实习生计划学习打卡—— Ipv6

    一.学习目标 理解IPv6的表示方法和地址类型 二.学习背景 在IPv4诞生的时代,是无法预见今日互联网的繁荣程度的,因此很多设计问题在发展的过程中也逐渐暴露出来,例如分类不合理,可用的公网IP地址总 ...

  2. CSDN超级实习生计划——大厂实习直通车,年薪最高可达30W。2022正式开启~

    一.CSDN超级实习生计划是什么? 2022届高校毕业生规模预计1076万人,同比增加167万人.这是高校毕业生规模首次超过千万,也是近几年增长人数最多的一年.1076万大学生就业的压力急剧暴增,也将 ...

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

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

  4. 内推名企实习,就来CSDN超级实习生计划,2022年名企实习内推开始发车

    一份拿得出手的大厂实习经验有多重要? 对没有经验的大二.大三学生来说:这是为自身真实能力背书,是拓宽视野,结交人脉的好机会,更是为以后拿到互联网大厂offer奠定基础. 对秋招失利/错过秋招的应届生来 ...

  5. 2022年超级实习生计划冲刺IT名企offer,9大高薪技巧助力名企梦

    CSDN推出超级实习生训练计划,属于名企内推直通保offer计划,本科毕业年薪可达30W+,除了获得名企实习offer之外,超级实习生们还能提升项目工程化交付能力. 加入超级实习生训练计划你可以获得什 ...

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

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

  7. 有人参加过CSDN超级实习生计划吗?靠谱吗?

    CSDN近期推出了超级实习生计划,相比市面上同类型实习类产品,超级实习生计划服务群体范围更小一些,主要服务于有志于从事IT行业的大学生们,专做IT赛道实习就业产品.那么至今为止有人参加过CSDN超级实 ...

  8. Steram流式计算学习笔记

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

  9. 付费内推实习是“割韭菜”吗?超级实习生计划也是吗?

    近期知名企业发布的2021年反舞弊通报中,有员工利用职权招收实习生并安排虚假远程实,从中获得了实习费用,虽然相关人员已受到想用处罚,但是去一些平台搜索"付费内推实习",价位从100 ...

最新文章

  1. 小白学python买什么书-终于明白小白学习python怎么学
  2. Go 的 flag 包可以解析命令行的参数
  3. 自动化配置和部署工具--puppet(1)--什么是puppet
  4. Java并发—线程池ThreadPoolExecutor基本总结
  5. 神经网络-损失函数:
  6. centos 6.2   为mysql5.6.10安装 HandlerSocket插件
  7. 深入浅出 Javascript API(一)--基本框架
  8. pcb文件转成原理图_电子设计基础教学-PCB板制作之 AD(Altium Designer)的工程建立过程...
  9. uni-app做收货地址功能
  10. 如何彻底卸载office!!
  11. 安卓开发 给控件左边右边下边添加阴影_Android 控件布局实现卡片效果,阴影效果...
  12. 视频图像的I帧、P帧、B帧详解
  13. Flappy Bird游戏 C语言实现
  14. matlab DSB-AM与SSB-AM的调制与解调
  15. k8s污点容忍度概念介绍
  16. Python + Django 入门级开发手顺
  17. oppor15android10怎么降级,OPPO R15系统降级教程_OPPO R15怎么回退到原来旧版本系统
  18. IB1010音频解码芯片
  19. Gartner:首席信息官能从IT支出中得到哪些收获?
  20. HALCON示例程序classify_halogen_bulbs.hdev使用SVM分类器检测卤素灯泡的好坏

热门文章

  1. 数码管点亮中几个常见三极管基极导通状态
  2. Ubuntu 20.04无法复制粘贴window里的文件的解决方法
  3. 3大功能全面升级!Cinema 4D S24好用在哪?
  4. 五款免费pdf转换成word软件
  5. (5)基于深度学习的短时道路交通流预测
  6. 新学期,新FLAG|去追逐梦想还是......
  7. 支持 ScrollView ViewGroup ListView RecyclerView NestedScrollView长截图
  8. 【小家java】java9新特性(简述十大新特性) 褒贬不一
  9. 宅急送快递门事件最新进展006
  10. oracle数据库迁移收费,ORACLE数据库迁移计划