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

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

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


实现 bufferUntilChanged

 

image.png

 

 

 

Source.from(Arrays.asList("A", "B", "B", "C", "C", "C", "D"))
.statefulMap(
() -> (List<String>) new LinkedList<String>(), (buffer, element) -> {
if (buffer.size() > 0 && (!buffer.get(0).equals(element))) { return Pair.create(
new LinkedList<>(Collections.singletonList(element)), Collections.unmodifiableList(buffer));
} else { buffer.add(element);
return Pair.create(buffer, Collections.<String>emptyList());
}
},
Optional::ofNullable)
.filterNot(List::isEmpty)
.runForeach(System.out::println, system);
// prints
// [A]
// [B, B]
// [C, C, C]
// [D]

 

 

举一反三,如何实现 distinctUntilChanged呢 ?

 

实现 distinctUntilChanged

image.png

 

 

 

Source.from(Arrays.asList("A", "B", "B", "C", "C", "C", "D"))
.statefulMap( Optional::<String>empty, (lastElement, element) -> {
if (lastElement.isPresent() && lastElement.get().equals(element)) { return Pair.create(lastElement, Optional.<String>empty());
} else {
return Pair.create(Optional.of(element), Optional.of(element));
}
},
listOnComplete -> Optional.empty())
.via(Flow.flattenOptional())
.runForeach(System.out::println, system);
// prints
// A
// B
// C
// D

 

如果要实现聚合buffer呢?

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

相关文章
|
存储 Java 开发者
领域驱动设计入门指南
领域驱动设计入门指南
457 0
|
新零售 前端开发 JavaScript
盒马跨端设计系统 ReX Design For OS
6 个月前,在 D2 前端技术论上我们向社区分享了《盒马中后台跨端方案》,详细介绍了我们在基于盒马实体零售数字化业务场景中,面向盒马营运数字化系统构建的跨端设计系统——ReX Design For OS。6 个月来,在开发资源极度紧张的状态下,我们持续建设和打磨,今天我们很高兴的告诉大家我们已经将项目的主要代码开源到了 Github,并发布了 beta 版本。
盒马跨端设计系统 ReX Design For OS
|
存储 监控 物联网
|
存储 程序员 编译器
堆和栈的区别
堆和栈的区别
|
缓存 监控 JavaScript
7min 到 40s:Spring Boot 启动优化实践 上
7min 到 40s:Spring Boot 启动优化实践 上
|
存储 SQL 搜索推荐
业务系统架构实践总结
作者从2015年起至2022年,在业务平台(结算、订购、资金)、集团财务平台(应收应付、账务核算、财资、财务分析、预算)、本地生活财务平台(发票、结算、预算、核算、稽核)所经历的业务系统研发实践的一个总结。
|
小程序 测试技术 开发者
微信小程序体验版(测试环境)和线上版(生产环境)发布
微信小程序体验版(测试环境)和线上版(生产环境)发布
2475 0
|
JavaScript Java 应用服务中间件
nginx 配置~~~本身就是一个静态资源的服务器
nginx 配置~~~本身就是一个静态资源的服务器
388 1
|
Shell
shell实战案例- 实现文件锁(调用外部脚本)
shell实战案例- 实现文件锁(调用外部脚本)
415 0
|
前端开发 JavaScript
Netty异步NIO框架(二)websocket 前端后端聊天 私聊及群聊
Netty异步NIO框架(二)websocket 前端后端聊天 私聊及群聊