即,通过传递错误条件而不是停止整个Observable?
My Observable以用户提供的常用送货服务(FedEx,UPS,DHL等)包裹追踪号码列表开始,在线查找预计送达日期,然后按照今天的天数返回这些日期(即"在3天"而不是"1月22日").问题是如果任何单个查找导致异常,整个流将停止,其余代码将不会被查找.例如,没有能力优雅地处理,UnknownTrackingCode Exception
因此Observable不能保证它会查找用户提交的所有代码.
public void getDaysTillDelivery(List<String> tracking_code_list) {
Observable o = Observable.from(tracking_code_list)
// LookupDeliveryDate performs network calls to UPS, FedEx, USPS web sites or APIs
// it might throw: UnknownTrackingCode Exception, NoResponse Exception, LostPackage Exception
.map(tracking_code -> LookupDeliveryDate(tracking_code))
.map(delivery_date -> CalculateDaysFromToday(delivery_date));
o.subscribe(mySubscriber); // will handle onNext, onError, onComplete
}
Run Code Online (Sandbox Code Playgroud)
由于一个错误而停止Observable流是设计的:
可以克服默认行为,但只能首先消除Rx的许多好处:
LookupDeliveryDate
所以它返回Dates代替Exceptions(例如1899-12-31
for UnknownTrackingCode Exception
)但这可以防止"松散耦合的代码",因为CalculateDaysFromToday
需要处理这些特殊情况try/catch
和阻止每个匿名函数,但这实际上阻止我使用lambdasif/thens
用来指导代码路径,但这可能需要维护一些状态并消除确定性评估Subscriber …
我有一个Vehicle
带有实现Car
、、等Motorcycle
的接口。Skateboard
我想创建一个Map
包含每个实现的属性或数据值的。一个非常简单的看起来像:
val vehicleInfo : Map<KClass<Vehicle>, Map<String, String>> mapOf(
Car::class to mapOf("wheels" to "4", "license_required" to "true"),
Motorcycle::class to mapOf("wheels" to "2", "license_required" to "true"),
Skateboard::class to mapOf("wheels" to "4", "license_required" to "false"),
)
Run Code Online (Sandbox Code Playgroud)
但这不会编译,因为Type Mismatch
(在KClass
键 和之间KClass<Vehicle>
)
(类似的可能性是使用地图值的数据类data class(val wheels : Int, val license_required : Boolean)
:)
有没有办法创建一个以类为键的 Map?或者,是否有更好的模式来在类和属性之间创建 1-1 映射(我不想说“属性”,因为显然,我可以将它们定义为接口中的属性,并在每个类定义中提供值 - - 我特别不想这样做,我想将所有属性保留在自己的 Map 或其他数据结构中)...似乎某些函数式编程概念或高阶函数可能适用于此。谢谢。
reflection functional-programming higher-order-functions kotlin
execute ×1
facet ×1
kotlin ×1
matplotlib ×1
postgresql ×1
python ×1
reflection ×1
rx-java ×1
seaborn ×1