gpt4 book ai didi

Scala for-comprehension 返回有序映射

转载 作者:行者123 更新时间:2023-12-05 01:14:54 26 4
gpt4 key购买 nike

如何使用 for-comprehension 返回我可以分配给有序 Map 的内容?这是我拥有的代码的简化:

class Bar
class Foo(val name: String, val bar: Bar)
val myList: java.util.List[Foo] = ...
val result: ListMap[String, Bar] =
for {
foo <- myList
} yield (foo.name, foo.bar)

我需要确保我的结果是一个有序的 Map,从 for-comprehension 返回元组的顺序。

有了以上,我得到了错误:
error: type mismatch;
found : scala.collection.mutable.Buffer[(String,Bar)]
required: scala.collection.immutable.ListMap[String,Bar]
foo <- myList

这编译:
class Bar
class Foo(val name: String, val bar: Bar)
val myList: java.util.List[Foo] = ...
val result: Predef.Map[String, Bar] =
{
for {
foo <- myList
} yield (foo.name, foo.bar)
} toMap

但后来我假设 map 不会被订购,我需要一个显式的 toMap 调用。

我怎样才能做到这一点?

最佳答案

collection.breakOut 在这种情况下是你的好 friend ,

val result: collection.immutable.ListMap[String, Bar] = 
myList.map{ foo => (foo.name, foo.bar) }(collection.breakOut)

如果使用 for-comprehension 表达式很重要,则将按如下方式进行,
val result: collection.immutable.ListMap[String, Bar] = {
for { foo <- myList } yield (foo.name, foo.bar)
}.map(identity)(collection.breakOut)

Scala 2.8 breakOut已解释 collection.breakOut 很好。

关于Scala for-comprehension 返回有序映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3827964/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com