我想知道创建List
个对象的最好方法是什么。
我能够想出的是将使用过的Range
转换为List
:
val objs: List[String] =
for (i <- 1.to(100).toList)
yield new String("" + i)
或将整个结果转换为toList
:
val objs: List[String] =
(for (i <- 1 to 100 )
yield new String("" + i)).toList
但它们对我来说都不够光滑。有没有更简单的方法来做到这一点?变量必须是List
类型,因为它在我正在使用的代码中的其他位置使用。提前谢谢!
答案 0 :(得分:6)
您可以直接在范围内使用toList
。
(1 to 100).toList
要将Ints转换为字符串,只需使用toString
并将其映射到范围:
(1 to 100).map(_.toString).toList
此外,您使用new String("" + i)
实际上是多余的。表达式"" + i
已经是一个String,因此您实际上是从现有的String中创建一个新的String。所以你应该只使用现有的String!
如果您真的希望"" + i
语法优于toString
,那么至少应该这样做:
(1 to 100).map("" + _).toList
编辑:根据您对真正希望摆脱toList
电话的评论,您可以使用breakOut
。这通过查看期望的类型(在此处等号的左侧指定)并直接创建该类集合来工作。好处是它避免在创建map
之前创建一个中间集合(来自List
),但它更加丑陋。
val xs: List[String] = (1 to 100).map(_.toString)(breakOut)
或者,如果您需要"" + _
语法
val xs: List[String] = (1 to 100).map("" + _)(breakOut)
或者,与你原先想要的for / yield一样:
val xs: List[String] = (for(i <- 1 to 100) yield "" + i)(breakOut)