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

目录
打赏
0
0
0
0
52
分享
相关文章
我的C++奇迹之旅:值和引用的本质效率与性能比较1
我的C++奇迹之旅:值和引用的本质效率与性能比较
我的C++奇迹之旅:值和引用的本质效率与性能比较2
我的C++奇迹之旅:值和引用的本质效率与性能比较
带你读《2022技术人的百宝黑皮书》——如何避免写重复代码:善用抽象和组合(4)
带你读《2022技术人的百宝黑皮书》——如何避免写重复代码:善用抽象和组合(4)
139 0
灵活时隙符号配比 | 带你读《5G 空口设计与实践进阶 》之十八
通过不同时隙格式的选择或不同时隙格式的聚合,NR 可以动态适配当前场景下的业务需求。
灵活时隙符号配比 | 带你读《5G 空口设计与实践进阶 》之十八
带你读《2022技术人的百宝黑皮书》——如何避免写重复代码:善用抽象和组合(3)
带你读《2022技术人的百宝黑皮书》——如何避免写重复代码:善用抽象和组合(3)
带你读《2022技术人的百宝黑皮书》——如何避免写重复代码:善用抽象和组合(1)
带你读《2022技术人的百宝黑皮书》——如何避免写重复代码:善用抽象和组合(1)
169 0
带你读《2022技术人的百宝黑皮书》——如何避免写重复代码:善用抽象和组合(5)
带你读《2022技术人的百宝黑皮书》——如何避免写重复代码:善用抽象和组合(5)
171 0
我们一直谈论“写代码”,但你会“读代码”吗?
编程,又被称作“写代码”。这个说法有可能会带来一点点误解,让人觉得如何“写”是学习编程要解决的主要问题。但事实并非如此。尽管最终代码要在键盘上敲出来,但这个过程在开发中的实际时间占比可能要远远小于你的预期。编写之前的设计,编写之后的调试,以及阅读他人的代码,这些会花费比“写”更多的时间。
如何避免写重复代码:善用抽象和组合
通过抽象和组合,我们可以编写出更加简洁、易于理解和稳定的代码;类似于金字塔的建筑过程,我们总是可以在一层抽象之上再叠加一层,从而达到自己的目标。但是在日常的开发工作中,我们如何进行实践呢?本文将以笔者在Akka项目中的一段社区贡献作为引子分享笔者的一点心得。
174 0
如何避免写重复代码:善用抽象和组合
读《技术的本质》思考之六
最后的最后,你对技术的思考时什么?
168 0

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等