当前位置: 首页 > news >正文

天津工程建设协会网站关于旅行的网站怎样做

天津工程建设协会网站,关于旅行的网站怎样做,html5网站开发案例,茂名中小企业网站制作书接上回 3.3.3 终结操作 3.3.3.1 forEach 对集合的每一个元素进行处理 接触很多了不赘述 3.3.3.2 count 用来获取当前流中的元素的个数 比如#xff0c;打印出所有作家的作品的总数 System.out.println(authors.stream().flatMap(author - author.getBooks().stre… 书接上回 3.3.3 终结操作 3.3.3.1 forEach 对集合的每一个元素进行处理 接触很多了不赘述 3.3.3.2 count 用来获取当前流中的元素的个数 比如打印出所有作家的作品的总数 System.out.println(authors.stream().flatMap(author - author.getBooks().stream()).count());3.3.3.3 max和min 可以用来流中的最值。 查看源码可以发现这个方法是需要传入参数的 OptionalT max(Comparator? super T comparator); OptionalT min(Comparator? super T comparator);Comparator是一个比较器但是这里的比较器是什么作用呢其实stream流的球最值和前面的sorted的实现逻辑类似都是要求先比较排序后再求最值 另外这个方法的返回值是Optional类型这个类型后续会再细讲。 所以max和min不用死记学会sorted就可以满足需要了 3.3.3.4 ⭐️collect 将流当中的元素转换为一个集合List/Set/Map。 阅读源码可以发现collect的两个参数都非常复杂在实际使用中会使用工具类的方法来快速实现 小练习快速上手 1、获取一个所有作者名字的集合List authors.stream().map(Author::getName).collect(Collectors.toList())2、获取一个所有书名的集合SET authors.stream().flatMap(author - author.getBooks().stream()).map(Book::getName).collect(Collectors.toSet()); 顺带一提由于set的去重作用所有其实前面提到的“去重“的需求也可以尝试用collect来实现 3、获取一个map集合Key为作者名Value为作品集List 沿用前面的思路利用Collectors.toMap方法实现但是转map是需要指定key和v的研究toMap方法就可以发现这里确实要求传入两个Function函数式接口如下 尝试先写一个匿名内部类的原生写法然后进行简化 // 获取一个map集合Key为作者名Value为作品集List ListAuthor authors Author.getAuthor(5); MapString, ListBook map authors.stream().collect(Collectors.toMap(new FunctionAuthor, String() {Overridepublic String apply(Author author) {return author.getName();}}, new FunctionAuthor, ListBook() {Overridepublic ListBook apply(Author author) {return author.getBooks();}}));System.out.println(map);// 第一次简化 authors.stream().collect(Collectors.toMap(author - author.getName(), author - author.getBooks()));// IDEA提供的进一步简化 authors.stream().collect(Collectors.toMap(Author::getName, Author::getBooks));不难发现toMap方法就是分别指定key和value就可以实现转map的要求了 4、获取一个map集合Key为作者名Value为作者 注意需求不同这次是将val作为作者本身的对象这个其实也是比较常见的需求 MapString, ListAuthor collect author.stream().collect(Collectors.groupingBy(new FunctionAuthor, String() {Overridepublic String apply(Author author) {return author.getName();}}));// 简化后 author.stream().collect(Collectors.groupingBy(Author::getName));介绍完简单的终结操作后接下来还有一些比较复杂的操作。比如需求场景 判断是否有25岁以上的作家判断是不是所有作家都刚满18岁 3.3.4 终结操作之查找与匹配 3.3.4.1 anyMatch 有任一元素符合条件则返回true 3.3.4.2 allMatch 所有符合条件则返回true 3.3.4.3 nonMatch 所有的元素都不符合条件 这个不需要硬记和allMatch互为补集 3.3.4.4 findAny 这个操作用于获取流中的任意一个元素注意这个操作无法保证获取的是第一个元素 3.3.4.5 findFirst 这个操作用于获取流中的第一个元素。 这个终结操作一般需要结合limit和 sorted使用 补充说明 这两个方法返回的对象是JDK8新增的Optional对象用于避免空指针等异常的后续会详细介绍。 要获取里面的对象使用get()方法即可。ifPresent()方法可以在对象存在时执行方法内的函数 3.3.5 ⭐️终结操作之归并操作-reduce reduce单词字面意思有减少的意思可以引申为缩小、裁剪的意思 3.3.5.1 reduce概念 对流中的数据按照指定的计算方式计算出一个结果。缩紧操作 reduce的作用将stream中的元素“组合”起来最终传出组合的结果起到一个紧缩、简化的作用。 两种实现方式 传入一个初始值按照给定的计算方式以此与流中的每个元素进行“计算”每次计算得到的结果都可以和后面的元素再进行计算并最终给出结果。没有初始值而是将第一个元素给定为初始值然后以此和流内的其他元素进行“计算”并给出结果。 两种方式对应reduce的两种重写方式 T reduce(T identity, BinaryOperatorT accumulator);OptionalT reduce(BinaryOperatorT accumulator); 3.3.5.2 reduce有初始值的重写 T reduce(T identity, BinaryOperatorT accumulator); 查看源码注释可以发现双参数的实现逻辑如下 T result identity; for (T element : this stream) result accumulator.apply(result, element) return result;做两个求最值的快速练习——求出所有作家的最大年纪 ListAuthor authors Author.getAuthor(); // 先打印出每个作家的年纪 authors.stream().map(Author::getAge).sorted().forEach(System.out::println); System.out.println(-----------------); // 求最大值 匿名内部类写法 Integer max authors.stream().map(Author::getAge).reduce(Integer.MIN_VALUE, new BinaryOperatorInteger() {Overridepublic Integer apply(Integer element, Integer next) {return element next ? next : element;}}); System.out.println(max); // 求最大值 lambda简化 Integer max1 authors.stream().map(Author::getAge).reduce(Integer.MIN_VALUE, (element, next) - element next ? next : element); System.out.println(max1);顺带一提前面学到的max()和min()底层就是使用reduce实现的 3.3.5.3 reduce无初始值的调用 OptionalT reduce(BinaryOperatorT accumulator); 实现低层逻辑是这样的 boolean foundAny false; T result null; for (T element : this stream) { if (!foundAny) { foundAny true; result element; } else result accumulator.apply(result, element); } return foundAny ? Optional.of(result) : Optional.empty();逻辑就是 第一个元素给定为初始值然后以此和流内的其他元素进行“计算”并给出结果。由于如果流为空返回的对象可能为空所有这里使用了Optional进行包装 做个练习一样是求最大年纪 // 匿名内部类原生写法 OptionalInteger optional authors.stream().map(Author::getAge).reduce(new BinaryOperatorInteger() {Overridepublic Integer apply(Integer element, Integer next) {return element next ? next : element;}}); // lambda简化 OptionalInteger optional1 authors.stream().map(Author::getAge).reduce((element, next) - element next ? next : element); optional.ifPresent(System.out::println); optional1.ifPresent(System.out::println);3.4 Stream流的注意事项 惰性求值一次性流不会影响原数据 3.4.1 惰性求值 没有任何终结操作前面的中间操作都不会得到执行和保留。 实际开发过程中由于没有终结操作的stream写法并不会编译报错所以在写代码的时候一定要养成添加终结操作的习惯 3.4.2 流是一次性的 在进行终结操作后流会失效报废。 举个例子 在实际开发过程中使用stream流应该在调用stream()方法后就使用链式编程直到终结操作如果需要再次操作就重新调用并生成新的流即可 3.4.3 不会影响原数据 特指是正常操作而且这也是选择stream流所期望的。 举个例子在map操作中将年龄10其实集合中元素的年龄是不会变化的。 在实际开发中如果是需要对集合的元素进行操作时则不建议使用stream流使用了stream流也应该尽量避免对集合中的元素进行操作增删改
http://www.hkea.cn/news/14587403/

相关文章:

  • 域名注册查询网站php心水主论坛网站制作网页设计
  • 网站建设案例典型企业案例品牌型网站开发
  • 外贸如何推广公司网站河南网站建设怎么收费
  • 网站开发课程学习广西网站怎么制作
  • cloud域名注册网站网站如何增加百度权重的方法
  • 网站建设特色企业解决方案和应对措施
  • 宁波 商城网站建设销售网站设计方案
  • 中咨建设监理有限公司网站wordpress商城主题模板
  • 手游传奇网站发布写作网站官方
  • 龙华建设发展有限公司网站阅读app软件开发
  • 公司开发个网站有哪些市场调查报告模板及范文
  • 网站插件代码下载哪里专业做网站
  • 哪些网站是增值网网站建设后需要维护吗
  • 淄博网站制作定制本地成都网站建设
  • 中企动力和东莞朝阳做的网站对比网站制作教程视频
  • iis网站没有属性能打开的网站你了解的
  • 现在的官方网站怎么做的青岛网站快速备案
  • 做外贸在哪个网站比较好wordpress html 编辑器
  • 机械英语网站天津做网站开发的
  • 如何将别人的网站作为自己的指定网站建设前期规划方案
  • 360°网站标签旋转显示特效网页设计个人网页制作
  • 怎么建设微网站八戒商标注册网
  • 做音乐网站用什么程序西安直播室网站建设
  • 沛县做网站263企业邮箱登录登录
  • 网站关键词被改做淘宝客为什么要建网站
  • 设计方案英文东莞网站优化哪里找
  • 企业网站建设管理制度美橙网站建设教程
  • php精品网站建设最新热搜新闻
  • 南京鼓楼做网站的公司升学宴ppt免费模板下载
  • 自己搭建网站dedecms 网站安全