也许是一个愚蠢的问题,但我不明白。
我有一个Set<Either<Failure, Success>>
,并且想用Arrow-kt输出一个Set<Success>
。
答案 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
我们可能会添加nullables
和val 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
。