带你读《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

相关文章
|
安全
带你读《2022技术人的百宝黑皮书》——如何避免写重复代码:善用抽象和组合(4)
带你读《2022技术人的百宝黑皮书》——如何避免写重复代码:善用抽象和组合(4)
带你读《2022技术人的百宝黑皮书》——MapStruct,降低无用代码的神器(8)
带你读《2022技术人的百宝黑皮书》——MapStruct,降低无用代码的神器(8)
带你读《2022技术人的百宝黑皮书》——MapStruct,降低无用代码的神器(8)
|
缓存 安全 Java
带你读《2022技术人的百宝黑皮书》——如何避免写重复代码:善用抽象和组合(1)
带你读《2022技术人的百宝黑皮书》——如何避免写重复代码:善用抽象和组合(1)
110 0
带你读《2022技术人的百宝黑皮书》——如何避免写重复代码:善用抽象和组合(3)
带你读《2022技术人的百宝黑皮书》——如何避免写重复代码:善用抽象和组合(3)
|
SQL 移动中间件 网络协议
带你读《2022技术人的百宝黑皮书》——如何避免写重复代码:善用抽象和组合(5)
带你读《2022技术人的百宝黑皮书》——如何避免写重复代码:善用抽象和组合(5)
151 0
|
JSON fastjson 数据格式
带你读《2022技术人的百宝黑皮书》——MapStruct,降低无用代码的神器(5)
带你读《2022技术人的百宝黑皮书》——MapStruct,降低无用代码的神器(5)
114 0
|
JSON Java Maven
带你读《2022技术人的百宝黑皮书》——MapStruct,降低无用代码的神器(1)
带你读《2022技术人的百宝黑皮书》——MapStruct,降低无用代码的神器(1)
109 0
带你读《2022技术人的百宝黑皮书》——MapStruct,降低无用代码的神器(3)
带你读《2022技术人的百宝黑皮书》——MapStruct,降低无用代码的神器(3)
|
JSON 前端开发 数据格式
带你读《2022技术人的百宝黑皮书》——MapStruct,降低无用代码的神器(4)
带你读《2022技术人的百宝黑皮书》——MapStruct,降低无用代码的神器(4)
|
设计模式 数据采集 IDE
我们一直谈论“写代码”,但你会“读代码”吗?
编程,又被称作“写代码”。这个说法有可能会带来一点点误解,让人觉得如何“写”是学习编程要解决的主要问题。但事实并非如此。尽管最终代码要在键盘上敲出来,但这个过程在开发中的实际时间占比可能要远远小于你的预期。编写之前的设计,编写之后的调试,以及阅读他人的代码,这些会花费比“写”更多的时间。