Вы можете отобразить набор следующим образом:
val successes = originalSet.mapNotNull { it.orNull() }.toSet()
или, если вы хотите левые:
val failures = originalSet.mapNotNull { it.swap().orNull() }.toSet()
Финальный toSet()
является необязательным, если вы хотите сохранить его как Set
, так как mapNotNull
является функцией расширения для Iterable
и всегда возвращает List
PS: глупых вопросов нет:)
Обновление:
Это можно сделать, избегая nullables
:
val successes = originalSet
.map { it.toOption() }
.filter { it is Some }
.toSet()
Мы могли бы потенциально добавить функции Iterable<Option<A>>.filterSome
и Iterable<Either<A, B>.mapAsOptions
.
Обновление 2:
Последний пример возвращает Set<Option<Success>>
. Если вы хотите развернуть результаты без использования null
, то вы можете попробовать сложить Set
:
val successes = originalSet
.fold(emptySet<Success>()) { acc, item ->
item.fold({ acc }, { acc + it })
}
Этот последний параметр (непреднамеренный каламбур) не требует использования Option
.