日发帖 发帖频率 发帖时段

通常,我们编写代码来计算出一堆可用的答案。 让我们来看一下Java中的情况。

 public Widget getAppropriateWidget(CustomerRequest request) { if (shelfstock.contains(request.getBarcode()) { return new ShelfWidget(); } if (backroomStock.contains(request.getBarcode()) { return new BackroomWidget(); } if (supplier.contains(request.getEan()) { return new SupplierWidget(); } return null ;  } 

您将不得不想象更复杂的场景,隐藏在上面的简化代码后面。 该算法的作用是按优先级顺序尝试选项,直到找到有效的选项,否则将失败,在这种情况下它将不返回任何内容。

我们还可以想象一下,由于某些原因,对contains的调用很昂贵–也许每个对象都隐藏了一个Web服务或复杂的数据库查询。

让我们以两种方式重构上面的代码开始。 让我们使用Optional ,让它为每个方法使用子例程。

 public Optional<Widget> getAppropriateWidget(CustomerRequest request) { Optional<Widget> shelfWidget = getShelfWidget(request); if (shelfWidget.isPresent()) { return shelfWidget; } Optional<Widget> backroomWidget = getBackroomWidget(request); if (backroomWidget.isPresent()) { return backroomWidget; } Optional<Widget> supplierWidget = getSupplierWidget(request); if (supplierWidget.isPresent()) { return supplierWidget; } return Optional.empty;  }  // imagine the subsidiary functions 

所以,这是有点优于的null不发现的回报,正努力使用子程序,使这个功能描述了自身,但它具有与每个的事实麻烦Optional返回的对象不能被链接到一个责任链。

我们可以作弊:

 Optional<Widget> shelfWidget = getShelfWidget(request);  Optional<Widget> backroomWidget = getBackroomWidget(request);  Optional<Widget> supplierWidget = getSupplierWidget(request);  return firstNonEmpty(shelfWidget, backroomWidget, supplierWidget);  private static Optional<Widget> firstNonEmpty( Optional<Widget> ... options) { return Arrays.stream(options) .filter(Optional::isPresent) .findFirst() // makes an optional of optional here... .orElse(Optional.empty());  } 

上面的代码更好一些,但是现在必须在选择一个答案之前预先计算所有可能的答案。 如果答案很快就会出现,我们就需要避免成本高昂的期权计算。

带有可选解决方案的第一个过去的帖子

将流或varargs数组传递给一个函数,该函数由将提供可选值的对象组成。 如果它们中的任何一个提供非空值,则获胜。

 // calling code  public Optional<Widget> getAppropriateWidget(CustomerRequest request) { return firstAvailable(() -> getShelfWidget(request), () -> getBackroomWidget(request), () -> getSupplierWidget(request));  }  // this is a general purpose solution  // feel free to use it  @SafeVarargs  private static <T> Optional<T> firstAvailable( Supplier<Optional<T>> ... options) { return Arrays.stream(options) .map(Supplier::get) .filter(Optional::isPresent) .findFirst() .orElse(Optional.empty());  } 

翻译自: https://www.javacodegeeks.com/2019/11/first-past-the-post.html

日发帖 发帖频率 发帖时段

日发帖 发帖频率 发帖时段_先发帖相关推荐

  1. 【2020百度发帖教学】百度贴吧怎么发帖顶帖?发广告图不删?还能带联系方式推广?

    现在网络营销的方式有很多,其中百度贴吧作为免费的讨论区,则成了大众营销推广的地方.但是百度贴吧在推出至今,随着百度规则的演变,大众会发现百度贴吧越来越难.特别是想要放入联系方式'链接.微信.QQ号这些 ...

  2. 无法发帖或者回复? 点这里参看如何发帖和回帖

    Discuz 7.1.0帖子内容页模板(Viewthread.htm)修改教程 Discuz , Viewthread , 教程 , htm , 模板 使用说明 1. 释版风格文件请勿直接用到站点中 ...

  3. android 发帖功能,GitHub - qiaop/android-post: Android图文发帖与浏览

    Android图文发帖与浏览 简述 很多的社交类项目中都有类似论坛的发帖功能,在探索了很多的实现方式之后找到了一种最为简单的实现. 功能非常丰富,核心文件只有5个: RichEditor.java e ...

  4. sql查询涵盖的时段_涵盖的主题

    sql查询涵盖的时段 涵盖的主题: (Topics Covered:) 1. 什么是NLP? (1. What is NLP?) A changing field 不断变化的领域 Resources ...

  5. 感量越大抑制频率约低_东芝推出高纹波抑制比、低噪声LDO稳压器

    东芝电子元件及存储装置株式会社("东芝")今日宣布,推出由32款LDO稳压器产品组成的"TCR3RM系列",为智能手机和可穿戴设备等移动电子设备提供更稳定的直流 ...

  6. 电容和频率的关系_为什么会有直流电和交流电?频率为什么是50hz?白话科普专业知识...

    交流电和直流电的区别 交流电即交变电流,大小和方向都随时间做周期性变化的电流. 直流电则相反.电网公司一般使用交流电方式送电,但有高压直流电用于远距离大功率输电.海底电缆输电.非同步的交流系统之间的联 ...

  7. 网易倩女找不到服务器,新倩女幽魂9月21日一直正在连接服务器_新倩女幽魂9月21日服务器一直连接解决办法_玩游戏网...

    明天<新倩女幽魂>就要和大家见面了,相信很多的网友已经迫不及待想在游戏中和居老师来一场偶遇.小编相信明天<新倩女幽魂>服务器一旦开启,一定会有大量的网友涌入,所以一定会有很多的 ...

  8. 感量越大抑制频率约低_脉冲信号是什么?它与频率,占空比,正、负逻辑间是什么关系?...

    在数字电子系统中,所有传送的信号均为开关量,即只有两种状态的电信号,这种电信号,我们称作做脉冲信号,这是所有数字电路中的基本电信号 一个标准的脉冲信号如下图所示. 我们把脉冲信号由低电压跳变至高电压的 ...

  9. 频率和波特率_实例详解 | 变频器端子启停与通信设定频率(附程序)

    PLC控制变频器时经常碰到需要频繁修改频率,只能选择用PLC通信来给定频率,在通过数字输出Q点来控制变频器启停正反转,从而实现PLC自动控制.在此我们以CPU ST30和V20变频器为例来讲解.硬件连 ...

最新文章

  1. 免费学python的网站-学数据分析Python必备的8个免费学习网站
  2. make_ext4fs 失败
  3. C#线程同步(1)- 临界区&Lock
  4. python 如何理解 numpy 数组操作中的 axis 参数?
  5. ie8以下 es5常见的数组遍历方法不可用的解决方案 forEach,map,filter,some,every
  6. hanganalyz 性能诊断工具
  7. Java消息队列总结只需一篇解决ActiveMQ、RabbitMQ、ZeroMQ、Kafka
  8. WSS学习(一)---简单部署图
  9. 外包公司到底值不值去?
  10. android文件添加一行代码怎么写,Android:以编程方式添加Textview,而不是将文本包装到下一行(示例代码)...
  11. 混乱的Comcast
  12. combobox的值从主页面传递到子页面
  13. [转载] 5.2 calendar--通用日期的相关函数(4)
  14. Cocos2d 利用继承Draw方法制作可显示三维数据(宠物三维等)的三角形显示面板...
  15. 初学者PLC程序及有效学习方法
  16. Allegro给一个网络赋默认值,取消默认值
  17. 帆软报表决策系统自定义登录界面 使用验证码登录 教程一
  18. 微服务可用性设计(二):过载保护,限流
  19. 基于VC 6.0实现简单的微信打飞机
  20. 微信公众号工作中如何产生新媒体思维

热门文章

  1. H - Tunnel Warfare HDU - 1540
  2. [CodeJam 2021 Round 3] Square Free(调整法 / 字典序最小解网络流)
  3. 容斥问卷调查反馈——Co-prime,Character Encoding,Tree and Constraints,「2017 山东一轮集训 Day7」逆序对
  4. CF1322B:Present(异或、two pointers)
  5. CF750E-New Year and Old Subsequence【动态dp】
  6. P5518-[MtOI2019]幽灵乐团【莫比乌斯反演,欧拉反演】
  7. P4332-[SHOI2014]三叉神经树【LCT】
  8. 欢乐纪中某A组赛【2019.7.8】
  9. ssl提高组周六模拟赛【2019.3.2】
  10. codeforces1440 E. Greedy Shopping