突破特定集合类型的捷径?

发布于 2024-08-28 03:47:11 字数 499 浏览 5 评论 0原文

scala> val m = Map(1 -> 2)
m: scala.collection.immutable.Map[Int,Int] = Map(1 -> 2)

scala>  m.map{case (a, b) => (a+ 1, a+2, a+3)}
res42: scala.collection.immutable.Iterable[(Int, Int, Int)] = List((2,3,4))

我想要的结果类型是 List[(Int, Int, Int)]。我发现的唯一方法是:

scala>  m.map{case (a, b) => (a+ 1, a+2, a+3)}(breakOut[Map[_,_], (Int, Int, Int), List[(Int, Int, Int)]])
res43: List[(Int, Int, Int)] = List((2,3,4))

有更短的方法吗?

scala> val m = Map(1 -> 2)
m: scala.collection.immutable.Map[Int,Int] = Map(1 -> 2)

scala>  m.map{case (a, b) => (a+ 1, a+2, a+3)}
res42: scala.collection.immutable.Iterable[(Int, Int, Int)] = List((2,3,4))

What I want is for the result type to be List[(Int, Int, Int)]. The only way I found is:

scala>  m.map{case (a, b) => (a+ 1, a+2, a+3)}(breakOut[Map[_,_], (Int, Int, Int), List[(Int, Int, Int)]])
res43: List[(Int, Int, Int)] = List((2,3,4))

Is there a shorter way?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

随波逐流 2024-09-04 03:47:11

您可以通过从返回类型推断出 breakOut 的类型参数来使其更加简洁:

scala>  m.map{case (a, b) => (a+1, a+2, a+3)}(breakOut) : List[(Int, Int, Int)]
res3: List[(Int, Int, Int)] = List((2,3,4))

You can make it a bit more concise by letting the type parameters to breakOut be inferred from the return type:

scala>  m.map{case (a, b) => (a+1, a+2, a+3)}(breakOut) : List[(Int, Int, Int)]
res3: List[(Int, Int, Int)] = List((2,3,4))
烟─花易冷 2024-09-04 03:47:11

虽然 Ben 的答案是正确的,但另一种选择是使用类型别名

type I3 = (Int, Int, Int)
m.map{case (a, b) => (a+ 1, a+2, a+3)}(breakOut[Map[_,_], I3, List[I3]])

Whilst Ben's is the correct answer, an alternative would have been to use a type alias:

type I3 = (Int, Int, Int)
m.map{case (a, b) => (a+ 1, a+2, a+3)}(breakOut[Map[_,_], I3, List[I3]])
手心的温暖 2024-09-04 03:47:11

结合 Ben 和 oxbow_lakes 的答案,你可以得到更短的内容:

type I3 = (Int, Int, Int)
m.map {case (a, b) ⇒ (a+1, a+2, a+3)}(breakOut): List[I3]

Combining Ben and oxbow_lakes' answers, you can get a little shorter still:

type I3 = (Int, Int, Int)
m.map {case (a, b) ⇒ (a+1, a+2, a+3)}(breakOut): List[I3]
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文