带你读《2022技术人的百宝黑皮书》——如何避免写重复代码:善用抽象和组合(2)

简介: 带你读《2022技术人的百宝黑皮书》——如何避免写重复代码:善用抽象和组合(2)

带你读《2022技术人的百宝黑皮书》——如何避免写重复代码:善用抽象和组合(1)https://developer.aliyun.com/article/1339970?groupCode=taobaotech


解法

 

所有上面的这些都可以抽象为:

  1. 带有状态,且线程安全
  2. 状态可变,且根据状态的不同,对输入应用不同的操作,产生不同的值
  3. 可以提前结束、或者对不满足条件的值进行选择性丢弃
  4. 有完整的生命周期
  5. 在结束时可以根据内部状态而产生可选的值,而不会丢失内部状态

 

经过分析,这里可以表达为 : 状态 + 输入 -(应用行为)-> 新的状态 + 输出 , 这样再加上 onCraete、onComplete 生命周期函数,就可以完整表达。而提前结束等行为,则可以通过组合takeWhile

 

实现。我们将方法命名为:statefulMap,声明如下:

 

  public <S, In, Out> statefulMap(
  java.util.function.Supplier<S> create,
  java.util.function.BiFunction<S, In, Pair<S, Out>> f,
  java.util.function.Function<S, Optional<Out>> onComplete){...}

 

 

让我们看一下如何通过这个方法来实现 zipWithIndex吧:

 

实现zipWithIndex (indexed)

image.png

 

Source.from(Arrays.asList("A", "B", "C", "D"))
.statefulMap( () -> 0L,
(index, element) -> Pair.create(index + 1, Pair.create(element, index)), indexOnComplete -> Optional.empty())
.runForeach(System.out::println, system);
// prints
// Pair(A,0)
// Pair(B,1)
// Pair(C,2)
// Pair(D,3)


也可以实现 zipWithNext、zipWithPreviousAndNext 我们再看看如何实现较为复杂的 bufferUntilChanged吧

 

带你读《2022技术人的百宝黑皮书》——如何避免写重复代码:善用抽象和组合(3)https://developer.aliyun.com/article/1339967?groupCode=taobaotech

相关文章
|
存储 设计模式 算法
DDD之于业务支撑的意义
DDD之于业务支撑的意义
467 0
|
新零售 前端开发 JavaScript
盒马跨端设计系统 ReX Design For OS
6 个月前,在 D2 前端技术论上我们向社区分享了《盒马中后台跨端方案》,详细介绍了我们在基于盒马实体零售数字化业务场景中,面向盒马营运数字化系统构建的跨端设计系统——ReX Design For OS。6 个月来,在开发资源极度紧张的状态下,我们持续建设和打磨,今天我们很高兴的告诉大家我们已经将项目的主要代码开源到了 Github,并发布了 beta 版本。
盒马跨端设计系统 ReX Design For OS
|
开发者 物联网 物联网安全
透视盒马:新零售操作系统的秘密
盒马是一个端到端,线上线下一体化的零售业务。在阿里CIO学院攻“疫”技术公益大咖说的第十六场直播中,盒马技术负责人何崚详细介绍了盒马产品技术在构建供给网络、销售网络、物流网络这三个核心命题时遇到的挑战和技术难点。
5326 2
|
SQL 存储 分布式计算
ODPS开发大全:入门篇(3)
ODPS开发大全:入门篇
1149 19
|
JSON 安全 数据安全/隐私保护
【Web】token机制
【Web】token机制
|
消息中间件 供应链 测试技术
图解 DDD,这一篇总结太全面了!
DDD领域驱动是非常热的架构设计,微服务也有大量涉及,本文详细解析领域驱动设计(DDD),涵盖DDD原理、实践步骤及核心概念等,帮助更好地管理复杂业务逻辑。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
图解 DDD,这一篇总结太全面了!
|
存储 缓存 运维
Docker镜像采用分层存储,每层代表镜像的一部分,如基础组件或应用依赖,多层叠加构成完整镜像
Docker镜像采用分层存储,每层代表镜像的一部分,如基础组件或应用依赖,多层叠加构成完整镜像。此机制减少存储占用,提高构建和传输效率。Docker还通过缓存机制提升构建和运行效率,减少重复工作。文章深入解析了Docker镜像分层存储与缓存机制,包括具体实现、管理优化及实际应用案例,帮助读者全面理解其优势与挑战。
617 5
|
Web App开发 Linux 应用服务中间件
【DrissionPage】Linux上如何将https改为http
通过上述步骤,可以在Linux上将DrissionPage从HTTPS改为HTTP。关键在于修改DrissionPage配置、代码中的HTTPS设置、URL以及Web服务器配置,确保所有部分都正确使用HTTP协议。通过合理配置和测试,能够确保系统在HTTP环境下稳定运行。
655 1
|
Kubernetes 应用服务中间件 Linux
多Master节点的k8s集群部署
多Master节点的k8s集群部署
|
存储 架构师 测试技术
架构之道:人人都是架构师(2)
每个业务系统的开发者都应该具备一定的架构师素养,架构师的重要职责不仅仅是做决策,更重要的是提升团队的整体能力。一个好的架构师应该聚焦于业务和系统,定义问题和结果,设计系统、模块和代码,同时也需要解决跨域问题,确定团队间的边界,制定规范,统一语言,并创建一个让每个人都能成长为架构师的环境,以促进团队的敏捷性。本文旨在探讨如何培养架构思维,并阐述了架构师的职责、能力模型、方法论,以及如何成为架构师。
551 10