Scala / Cats:如何解压缩NonEmptyList

时间:2019-07-18 16:38:54

标签: scala scala-cats

标准库在unzip上提供了List方法:


scala>val l = List((1, "one"), (2, "two"), (3, "three"), (4, "four"), (5, "five"))

scala> l.unzip
// res13: (List[Int], List[String]) = (
//  List(1, 2, 3, 4, 5),
//  List("one", "two", "three", "four", "five")
//)

是否可以通过NonEmptyList库在cats上实现相同的目标:

scala> import cats.data.NonEmptyList

scala> val nel = NonEmptyList.of((1, "one"), (2, "two"), (3, "three"), (4, "four"), (5, "five"))
//res15: NonEmptyList[(Int, String)] = NonEmptyList(
//  (1, "one"),
//  List((2, "two"), (3, "three"), (4, "four"), (5, "five"))
//)

2 个答案:

答案 0 :(得分:4)

您可以简单地调用nel.toList并使用标准的l.unzip,然后对结果使用NonEmptyList.fromList(unziped_list)

编辑:如@Dylan所说,您也可以使用.fromListUnsafe摆脱该选项。

答案 1 :(得分:0)

您不必一次遍历全部内容,而且通常甚至不想使用其中一部分。我会这样写:

(nel.map(_._1), nel.map(_._2))

这避免了尴尬的转换,使转换远离NEL并返回。