Carter Youngblood
02/25/2020, 5:13 PMKStream<Either<Error, Result>>
and create a Pair
of KStream<Error>
and KStream<Result>
. I was not sure how to accomplish this using Either from arrow. We have some helpers in scala that do this now, and for my learning I wanted to do the same in kotlin - in scala it looks something like this -
def forkValuesEither: (KStream[K, LV], KStream[K, RV]) = (
kStream.flatMapValues(_.left.toSeq),
kStream.flatMapValues(_.right.toSeq)
)
but I was not sure how to get to the value in arrow/kotlin of the either to return.raulraja
02/25/2020, 5:31 PMraulraja
02/25/2020, 5:31 PMCarter Youngblood
02/25/2020, 5:43 PMCarter Youngblood
02/25/2020, 5:44 PMsimon.vergauwen
02/25/2020, 5:47 PMsimon.vergauwen
02/25/2020, 5:47 PMflatMapValues
?Carter Youngblood
02/25/2020, 5:48 PMdef flatMapValues[VR](mapper: V => Iterable[VR]): KStream[K, VR]
Carter Youngblood
02/25/2020, 5:48 PMsimon.vergauwen
02/25/2020, 5:50 PM_.left.toSeq
that threw me offsimon.vergauwen
02/25/2020, 5:50 PMleftProjection
and then toSeq
which issimon.vergauwen
02/25/2020, 5:51 PMfun <A, B> Either<A, B>.leftIterable(): List<A> = when(this) {
is Either.Left -> listOf(l)
is EIther.Right -> emptyList()
}
simon.vergauwen
02/25/2020, 5:51 PMflatMapValues
to filter left
and right
using Seq
but that’s a little hacky IMO 😄simon.vergauwen
02/25/2020, 5:52 PMCarter Youngblood
02/25/2020, 5:52 PMsimon.vergauwen
02/25/2020, 5:52 PMfun <A, B> KStream<A>.mapFilter(f: (A) -> B?): KStream<B> = ...
Carter Youngblood
02/25/2020, 5:53 PMdef toSeq: Seq[A] = e match {
case Left(a) => Seq(a)
case _ => Seq.empty
}
simon.vergauwen
02/25/2020, 5:53 PMkStream.mapFilter { (it as? Left)?.l }
simon.vergauwen
02/25/2020, 5:53 PMCarter Youngblood
02/25/2020, 5:54 PMCarter Youngblood
02/25/2020, 5:54 PMsimon.vergauwen
02/25/2020, 5:58 PMsimon.vergauwen
02/25/2020, 5:58 PMsimon.vergauwen
02/25/2020, 5:59 PMCarter Youngblood
02/25/2020, 5:59 PMsimon.vergauwen
02/25/2020, 6:08 PM