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

西安巨久科技网站建设浙江建设报名网站

西安巨久科技网站建设,浙江建设报名网站,做搜狗手机网站优化快,初学seo网站推广需要怎么做一、Stream 流介绍与使用场景 Stream 流介绍 java8 中的stream 与InputStream和OutputStream是完全不同的概念, stream 是用于对集合迭代器的增强#xff0c;使之完成能够完成更高效的聚合操作#xff08;过滤、排序、统计分组#xff09;或者大批量数据操作。stream 与 L…一、Stream 流介绍与使用场景 Stream 流介绍 java8 中的stream 与InputStream和OutputStream是完全不同的概念, stream 是用于对集合迭代器的增强使之完成能够完成更高效的聚合操作过滤、排序、统计分组或者大批量数据操作。stream 与 Lambda 表达式结合后编码效率大大提高可读性更强。 举例如下 // 获取所有红色苹果的总重量 appleStore.stream().filter(a - red.equals(a.getColor())) .mapToInt(w - w.getWeight()).sum() // 基于颜色统计平均重量 appleStore.stream().collect(Collectors.groupingBy(a - a.getColor(),Collectors.averagingInt(a - a.getWeight()))).forEach((k, v) - {System.out.println(k : v); });使用场景 场景一跨库join的问题 查询一个店铺的订单信息需要用到订单表与会员表 在传统数据库单一例中 可以通过jon 关联轻松实现但在分布场景中 这两张表分别存储在于 交易库 和会员库 两个实例中join不能用。只能在服务端实现其流程如下 查询订单表数据找出订单中所有会员的ID根据会员ID查询会员表信息将订单数据与会员数据进行合并 这用传统迭代方法非常繁琐而这正是stream 所擅长的。示例代码如下 // 获取所有会员ID 并去重 ListInteger ids orders.stream().map(o - o.getMemberId()).distinct().collect(Collectors.toList()); // 合并会员信息 至订单信息 orders.stream().forEach(o - {Member member members.stream().filter(m - m.getId() o.getMemberId()).findAny().get();o.setMemberName(member.getName()); });场景二N1 问题 二、Lambda 表达式 Lambda 简介 Lambda 表达式也可称为闭包它是推动 Java 8 发布的最重要新特性。Lambda 允许把函数作为一个方法的参数函数作为参数传递进方法中。Lambda 表达式可以使代码变的更加简洁紧凑。 匿名类写法 new Thread(new Runnable() {Overridepublic void run() {System.out.println(hello world);} }).start();Lambda写法 new Thread(() - System.out.println(hello world)).start();在上述例子中编译器会将 “System.out.println(“hello world”)” 编译成Runnable.run 的执行指令。因为 run 方法是Runnable接口的唯一方法代码中我们无需指明Run方法。如果Runable有多个方法是不能使用Lambda表达示的。 函数式接口 支持Lambda的接口统称函数式接口。 只有一个抽像方法的接口就是函数式接口其详细特征如下 接口中标注了 FunctionalInterface 注解接口中只有一个抽像方法会被编译器自动认识成函数式接口接口中有一个抽像方法同时包含了Object类的其它抽像方法也会被识别成抽像接口 Lambda表达式三种编写方式 expression单条语句表达式statement语句块reference方法引用 三、Stream 流执行机制 流的操作特性 stream不存储数据stream不改变源数据stream 不可重复使用 流的操作类型 stream 所有操作组合在一起即变成了管道管道中有以下两种操作 中间操作(intermediate): 调用中间操作方法会返回一个新的流。通过连续执行多个操作倒便就组成了Stream中的执行管道pipeline。需要注意的是这些管道被添加后并不会真正执行只有等到调用终值操作之后才会执行。终值操作(terminal) 在调用该方法后将执行之前所有的中间操作获返回结果结束对流的使用流的执行顺序说明其每个元素挨着作为参数去调用中间操作及终值操作而不是遍历完一个方法再遍历下一个方法。流的并行操作调用Stream.parallel() 方法可以将流基于多个线程并行执行 Stream 中的常用API及场景 方法描述操作类型filter接收一个Boolean表达示来过滤元素中间操作map将流中元素 1:1 映谢成另外一个元素中间操作mapToInt将流中元素映谢成intmapToLong、mapToDouble操作类似目的减少 装箱拆箱带来的损耗中间操作flatMap如map时返回的是一个List, 将会进一步拆分。详见flatMap示例中间操作forEach遍历流中所有元素终值操作sorted排序中间操作peek遍历流中所有元素 如forEach不同在于不会结束流中间操作toArray将流中元素转换成一个数组返回终值操作reduce归约合并操作中间操作collect采集数据返回一个新的结果 参数说明Supplier 采集需要返回的结果BiConsumerR, ? super T传递结果与元素进行合并。BiConsumerR, R在并发执行的时候 结果合并操作。详见 collec示例终值操作distinct基于equal 表达示去重中间操作max通过比较函数 返回最大值终值操作anyMatch流中是否有任一元素满足表达示终值操作allMatch流中所有元素满足表达示返回true终值操作noneMatch与allMatch 相反都不满足的情况下返回 true终值操作findFirst找出流中第一个元素终值操作of生成流生成流操作iterate基于迭代生成流生成流操作generate基于迭代生成流与iterate 不同的是不 后一元素的生成不依懒前一元素生成流操作concat合并两个相同类型的类生成流操作 举例 Testpublic void filterTest() {appleStore.stream().filter(a - a.getColor().equals(red)).forEach(a - {System.out.println(a.getColor());});}Testpublic void mapTest() {appleStore.stream().map(a - a.getOrigin()).forEach(System.out::println);}Testpublic void flatMapTest() throws IOException {StreamString lines Files.lines(new File(G:\\git\\tuling- java8\\src\\main\\java\\com\\tuling\\java8\\stream\\bean\\Order.java).toPath());lines.flatMap(a - Arrays.stream(a.split( ))).forEach(System.out::println);}Testpublic void sortedTest() {appleStore.stream().sorted((a, b) - a.getWeight() - b.getWeight()).map(a - a.getWeight()).forEach(System.out::println);}Testpublic void peekTest() {appleStore.stream().peek(a - {System.out.println(a.getId());}).map(a - a.getOrigin()).peek(System.out::println).forEach(a - {});}Testpublic void reduceTest() {// 找出最重的那个苹果appleStore.stream().reduce((a, b) - a.getWeight() b.getWeight() ? a : b).ifPresent(a - {System.out.println(a.getWeight());});}Testpublic void collectTest() {// 将结果转换成id作为key mapInteger,AppleHashMapInteger, Apple map appleStore.stream().collect(HashMap::new, (m, a) - m.put(a.getId(), a), (m1, m2) - m1.putAll(m2));map.forEach((k, v) - {System.out.println(k);System.out.println(v);});// MapString,ListApple// 基于颜色分组 并获取其平均重量}Collectors 中的常用API及场景 方法描述toList转换成listtoMap转换成mapgroupingBy统计分组averagingInt求平均值summingInt求总值maxBy获取最大值 举例: // 获得所有颜色苹果的平均重量 Test public void groupByTest() {CollectorApple, ?, MapString, Double groupCollect Collectors.groupingBy((Apple a) - a.getColor(), Collectors.averagingInt((Apple a) - a.getWeight()));appleStore.stream().collect(groupCollect).forEach((k, v) - {System.out.println(k : v);});}流的关闭机制 一般情况使用完流之后不需要调用 close 方法进行关闭除非是使用channel FileInputStream 这类的操作需要关闭,可调用 java.util.stream.BaseStream#onClose() 添加关闭监听。
http://www.zqtcl.cn/news/925110/

相关文章:

  • 深圳返利网站开发做网站版权怎么写
  • 上传网站内容做社交电商第一步怎么做
  • 网站icp查询系统wordpress 页面 首页
  • wordpress安装教程wamp搜索引擎优化的英文缩写是什么
  • 成都旅行社网站建设网站建设包含哪些方面
  • 找不到网站后台怎么办韩国网站域名分类
  • 建设商务网站作用积极参与网站信息建设工作
  • 网站开发阶段Oss怎么做静态网站
  • 做科学小制作的视频网站怎么才能建立自己的网站啊
  • 跳蚤市场网站开发背景网站优点
  • 长春网站建设方案咨询怎么做自己的网站平台
  • 网站建设谈单技巧做网站建设科技公司
  • 品牌网站建设4a小蝌蚪网页设计分类
  • 域名注册以后会给你一个账户名密码上传做好的网站文化网站建设需要的功能
  • 企业站用wordpress做好吗那些做环保网站的好
  • 天津有哪些有名的网站建设公司商城网站模板免费
  • 安徽省途顺建设工程有限公司网站制作网站公
  • 北京建设职工大学网站成都网站建设比较好的公司
  • 网站建设品牌策wordpress怎么做企业网站
  • 网站正在建设中 html 模板医院网站建设预算表
  • 哪个网站能接施工图来做购物网站黑白
  • 网站开发课设心得企业宣传页模板
  • 中学生怎么做网站ghost 卸载wordpress
  • 网站诊断报告案例用户浏览网站的方式
  • 网站开发流程抚州做网站需要看的书
  • wordpress 禁止目录浏览网站seo推广优化
  • 源代码如何做网站高校门户网站建设需要多少钱
  • 深圳微商城网站制作报价基础网页设计教程
  • wordpress+vps建站大连网站建设运营
  • 第一次开票网站建设怎么开制作网站品牌公司哪家好