如何进行类型安全的将任一集合缩减为仅正确

时间:2019-03-13 11:02:37

标签: kotlin arrow-kt

也许是一个愚蠢的问题,但我不明白。

我有一个Set<Either<Failure, Success>>,并且想用Arrow-kt输出一个Set<Success>

1 个答案:

答案 0 :(得分:6)

您可以向右映射这样的集合:

beforeLoad

或者如果您想离开的话:

newRecord

如果您想将其保留为val successes = originalSet.mapNotNull { it.orNull() }.toSet() ,则最后一个val failures = originalSet.mapNotNull { it.swap().orNull() }.toSet() 是可选的,因为toSet()Set的扩展函数,并且始终返回mapNotNull

PS:没有愚蠢的问题:)

更新: 可以避免使用Iterable

List

我们可能会添加nullablesval successes = originalSet .map { it.toOption() } .filter { it is Some } .toSet() 函数。

更新2:

最后一个示例返回一个Iterable<Option<A>>.filterSome。如果您想不使用Iterable<Either<A, B>.mapAsOptions来解开结果,那么您可以尝试的一件事是折叠Set<Option<Success>>

null

最后一个选项(双关语)不需要使用Set