响应式编程格式,参考博客
https://blog.51cto.com/liukang/2090170
https://blog.csdn.net/zgpeace/article/details/103311708
流的理解
任何东西都可以认为是一个数据流,面向数据流编程。观察者观察关心的数据流并执行相关业务操作。变化传播:输入一个数据流,经过一系列操作转化成另一个数据流
使用
流式编程中方法:map和flatmap 的区别
map
一个数据项经过转换映射成一个新的数据项
入:数据项–>出:新数据项 各个数据项组合成数据流
Flowable.just(5, 2, 4, 0, 3, 2, 8)
.map(i -> i+1)
.subscribe(System.out::println);
flatMap
入:数据项–>出:数据流 出的数据流组合成一个新的数据流
Flowable.just(5, 2, 4, 0, 3, 2, 8)
.flatMap(i -> Flowable.just(i, i+1, i+2, i+3))
.subscribe(System.out::println);
onErrorReturn(常用的错误操作符)
在流中遇到错误时,接管流,发送数据然后正常终止。
Flowable.just(“this is a item”)
.map(item -> item.replaceFirst(null, “iss”))
.onErrorReturn(throwable -> throwable.toString())
.subscribe(System.out::println);
运行结果 输出throwable序列化的字符串:java.lang.NullPointerException
响应式编程应用实列
Flux.fromIterable(csiCheckerList)
.map(checker -> checker.check(ctx, csiCommonProperties, csiObject))
.filter(Optional::isPresent)
.map(Optional::get)
.map(Mono::fromFuture)
.flatMap(Mono::flux)
.take(1)
.subscribe(
csiResultListener::consume,
e -> {
if (e instanceof CsiCommonException) {
throw (CsiCommonException) e;
}
throw new CsiCommonException(ErrorCodeEnum.SYSTEM_ERROR.getCode(),
"Failed to invoke CsiChecker list , traceId=" + PandoraHelper.getInstance().getTraceId() + ", errorMsg =" + e.getMessage(),
e
);
},
() -> {
// noop
}
);