Quizá sea una pregunta tonta, pero no lo entiendo.
Tengo un Set<Either<Failure, Success>> y quiero generar un Set<Success> con Arrow-kt.
Puede mapear el conjunto de esta manera para la derecha:
val successes = originalSet.mapNotNull { it.orNull() }.toSet()o si quieres las izquierdas:
val failures = originalSet.mapNotNull { it.swap().orNull() }.toSet() El toSet() final es opcional si desea mantenerlo como un Set , ya que mapNotNull es una función de extensión en Iterable y siempre devuelve una List
PD: No hay preguntas tontas :)
Actualización: se puede hacer evitando nullables :
val successes = originalSet .map { it.toOption() } .filter { it is Some } .toSet() Podríamos agregar las Iterable<Option<A>>.filterSome e Iterable<Either<A, B>.mapAsOptions .
Actualización 2:
Ese último ejemplo devuelve un Set<Option<Success>> . Si desea desenvolver los resultados sin usar null , entonces una cosa que puede intentar es doblar el Set :
val successes = originalSet .fold(emptySet<Success>()) { acc, item -> item.fold({ acc }, { acc + it }) } Esta última opción (juego de palabras no intencionado) no requiere el uso de Option .