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

相关文章
|
9月前
|
安全
带你读《2022技术人的百宝黑皮书》——如何避免写重复代码:善用抽象和组合(4)
带你读《2022技术人的百宝黑皮书》——如何避免写重复代码:善用抽象和组合(4)
|
9月前
|
Swift
带你读《2022技术人的百宝黑皮书》——响应式编程的复杂度和简化(5)
带你读《2022技术人的百宝黑皮书》——响应式编程的复杂度和简化(5)
|
9月前
|
缓存 API 开发工具
带你读《2022技术人的百宝黑皮书》——响应式编程的复杂度和简化(2)
带你读《2022技术人的百宝黑皮书》——响应式编程的复杂度和简化(3)
|
9月前
|
安全
带你读《2022技术人的百宝黑皮书》——如何避免写重复代码:善用抽象和组合(2)
带你读《2022技术人的百宝黑皮书》——如何避免写重复代码:善用抽象和组合(2)
带你读《2022技术人的百宝黑皮书》——如何避免写重复代码:善用抽象和组合(2)
|
9月前
带你读《2022技术人的百宝黑皮书》——MapStruct,降低无用代码的神器(8)
带你读《2022技术人的百宝黑皮书》——MapStruct,降低无用代码的神器(8)
带你读《2022技术人的百宝黑皮书》——MapStruct,降低无用代码的神器(8)
|
9月前
|
SQL 移动中间件 网络协议
带你读《2022技术人的百宝黑皮书》——如何避免写重复代码:善用抽象和组合(5)
带你读《2022技术人的百宝黑皮书》——如何避免写重复代码:善用抽象和组合(5)
121 0
|
9月前
|
缓存 安全 Java
带你读《2022技术人的百宝黑皮书》——如何避免写重复代码:善用抽象和组合(1)
带你读《2022技术人的百宝黑皮书》——如何避免写重复代码:善用抽象和组合(1)
|
9月前
|
存储 Swift 开发者
带你读《2022技术人的百宝黑皮书》——响应式编程的复杂度和简化(4)
带你读《2022技术人的百宝黑皮书》——响应式编程的复杂度和简化(4)
|
9月前
带你读《2022技术人的百宝黑皮书》——响应式编程的复杂度和简化(6)
带你读《2022技术人的百宝黑皮书》——响应式编程的复杂度和简化(6)
|
9月前
|
设计模式
带你读《2022技术人的百宝黑皮书》——响应式编程的复杂度和简化(1)
带你读《2022技术人的百宝黑皮书》——响应式编程的复杂度和简化(1)