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

相关文章
|
JSON 前端开发 Java
Json格式数据解析
Json格式数据解析
699 1
|
数据采集 数据挖掘 UED
物流产品体验诊断与优化
物流产品体验诊断与优化
1067 1
|
人工智能 安全 API
大模型推理主战场:通信协议的标配
DeepSeek加速了模型平权,大模型推理需求激增,性能提升主战场从训练转向推理。SSE(Server-Sent Events)和WebSocket成为大模型应用的标配网络通信协议。SSE适合服务器单向推送实时数据,如一问一答场景;WebSocket支持双向实时通信,适用于在线游戏、多人协作等高实时性场景。两者相比传统HTTPS协议,能更好地支持流式输出、长时任务处理和多轮交互,满足大模型应用的需求。随着用户体量扩大,网关层面临软件变更、带宽成本及恶意攻击等挑战,需通过无损上下线、客户端重连机制、压缩算法及安全防护措施应对。
1928 176
大模型推理主战场:通信协议的标配
|
10月前
|
监控 安全 Java
|
SQL 存储 分布式计算
ODPS开发大全:入门篇(3)
ODPS开发大全:入门篇
1149 19
|
监控 Oracle Java
JDK 21中的分代ZGC:一场内存管理的革命
JDK 21引入了分代ZGC,为Java应用程序的内存管理带来了革命性的进步。分代ZGC通过将堆内存划分为年轻代和老年代,采用并发处理和染色指针技术,实现了高吞吐量、低延迟和更好的可扩展性。这一特性显著提升了系统的性能和稳定性。
1497 51
|
Java 测试技术 Maven
maven跳过单元测试-maven.test.skip和skipTests的区别
maven跳过单元测试-maven.test.skip和skipTests的区别
416 0
|
存储 缓存 监控
聊聊JIT是如何影响JVM性能的!
聊聊JIT是如何影响JVM性能的!
373 6
|
存储 监控 物联网
|
存储 程序员 编译器
堆和栈的区别
堆和栈的区别
1012 0