我想知道创建List
对象的最佳方法是什么。
我能想到的是将二手车转换Range
为List
:
val objs: List[String] =
for (i <- 1.to(100).toList)
yield new String("" + i)
或将整个结果转换为wit toList
:
val objs: List[String] =
(for (i <- 1 to 100 )
yield new String("" + i)).toList
但是它们对我来说看起来都不够流畅。有没有更简单的方法可以做到这一点?变量必须是类型,List
因为它在我正在处理的代码中的其他地方使用。提前致谢!
您可以toList
直接在Range上使用。
(1 to 100).toList
要将Ints转换为String,只需toString
在Range上使用并映射它:
(1 to 100).map(_.toString).toList
此外,您的使用new String("" + i)
确实是多余的。该表达式"" + i
已经是一个字符串,因此您实际上是在现有字符串的基础上制作一个新的字符串。因此,您应该只使用现有的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)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句