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