在Scala中将Future [List [Error \ / Double]]转换为Future [[List [Error] \ / List [Double]]

丹尼斯·VDB

我正在玩Scala(z)来学习函数式编程。

我有一个type的值,Future[List[Error \/ Double]]并想将其转换为type Future[[List[Error] \/ List[Double]]

目标是将左和右归为一组。

我目前有以下内容:

val foo: Future[List[Error] \/ List[Double]] = {
  for {
    results <- resultsF
  } yield
    results.foldLeft(\/[List[Error], List[Double]])({
      case (acc, v) if v.isRight => v :: \/-(acc)
      case (acc, v) if v.isLeft => v :: -\/(acc)
    })
}

但是,::由于,我的累加器不是列表(从外部),因此我在上出现错误\/[List[Error], List[Double]]应该怎么做?

友人

此功能在Haskell是partitionEithers[Either a b] -> ([a], [b])

(实际上Either [a] [b]您实际上并不需要,因为您描述中的文字,所以我想您要使用此功能,而不是。)

Scalaz并没有提供它。但是,它具有更一般的含义separate

/** Generalized version of Haskell's `partitionEithers` */
def separate[G[_, _], A, B](value: F[G[A, B]])(implicit G: Bifoldable[G]): (F[A], F[B])

基本上是哪个Bifoldable g, MonadPlus f => f (g a b) -> (f a), (f b)具体来说:[Either a b] -> ([a], [b])您可以在列表中(在g = \/(或两者之一),f = List)中简单地调用它

实际上:

scala> import scalaz._, Scalaz._
scala> List(\/-(3), -\/("a")).separate
res1: (List[String], List[Int]) = (List(a),List(3))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在Java中将scala Seq [Double]转换为Java List <Double>

将Scala List [List [Double]]转换为Java double [] []

如何在Java中将List <Double>转换为double []?

Scalaz中的Future [Option [List [List [Double]]]到Future [Option [List [List [Double]]]]

如何在Flutter中将Future <List>转换为List?

Scala - 将 List[((String, String), Double)] 转换为 List[String,Map[String,Double]]

在C#中将List <double>转换为DataTable列

在R.NET中将DataTable转换为List <double>

与List <List <double >>不同

Scala Spark-将RDD [List [scala.Double]]转换为RDD [scala.Double]

将List <double>转换为double [n,1]

如何使用Java 8流API将List <List <Double >>转换为List <Double []>和List <double []>?

将Future [List [String]]转换为List [String]

如何将 Future<List<Object>> 转换为 List<Object>?

如何在Dart语言中将Future <List <Map>转换为List <Map>?

如何将Collection <Collection <Double >>转换为List <List <Double >>?

使用double []的RAM的List <Double>?

将List <double>转换为LiveCharts.IChartValues

将int转换为List <double?>,ChartJS Core

python list comprehension double for

python list comprehension double for

将 List<List<double> 提取到 list<double>

合并List <List <double [] >>中的某些List <double []>

在Scala中将List [Option [A]]转换为Option [List [A]]

Flutter中将Future <Uint8List>转换为Base64或PNG

如何创建将List <List <Integer >>和List <List <Double >>(可能更多)都转换为字符串的函数?

怎么把List [Double]转换成列?

List <Future>到Future <List>序列

Scala用于理解Future,List和Option