带你读《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)
100 0
带你读《2022技术人的百宝黑皮书》——如何避免写重复代码:善用抽象和组合(3)
带你读《2022技术人的百宝黑皮书》——如何避免写重复代码:善用抽象和组合(3)
|
SQL 移动中间件 网络协议
带你读《2022技术人的百宝黑皮书》——如何避免写重复代码:善用抽象和组合(5)
带你读《2022技术人的百宝黑皮书》——如何避免写重复代码:善用抽象和组合(5)
153 0
|
缓存 安全 Java
带你读《2022技术人的百宝黑皮书》——如何避免写重复代码:善用抽象和组合(1)
带你读《2022技术人的百宝黑皮书》——如何避免写重复代码:善用抽象和组合(1)
116 0
|
算法 Java Maven
带你读《2022技术人的百宝黑皮书》——MapStruct,降低无用代码的神器(10)
带你读《2022技术人的百宝黑皮书》——MapStruct,降低无用代码的神器(10)
|
缓存 JSON 前端开发
带你读《2022技术人的百宝黑皮书》——MapStruct,降低无用代码的神器(6)
带你读《2022技术人的百宝黑皮书》——MapStruct,降低无用代码的神器(6)
|
Java Spring
带你读《2022技术人的百宝黑皮书》——MapStruct,降低无用代码的神器(7)
带你读《2022技术人的百宝黑皮书》——MapStruct,降低无用代码的神器(7)
108 0
|
Java Maven
带你读《2022技术人的百宝黑皮书》——MapStruct,降低无用代码的神器(9)
带你读《2022技术人的百宝黑皮书》——MapStruct,降低无用代码的神器(9)
265 0
|
JSON 前端开发 数据格式
带你读《2022技术人的百宝黑皮书》——MapStruct,降低无用代码的神器(4)
带你读《2022技术人的百宝黑皮书》——MapStruct,降低无用代码的神器(4)
带你读《2022技术人的百宝黑皮书》——MapStruct,降低无用代码的神器(3)
带你读《2022技术人的百宝黑皮书》——MapStruct,降低无用代码的神器(3)