这看起来应该很容易,但我不能把它放在一起。我想获取一个字符串列表并创建一个新列表,其中包含第一个列表中每个元素的两个但具有不同的后缀。所以:
List("a", "b", "c") -> List("a_x", "a_y", "b_x", "b_y", "c_x", "c_y"
我试过
val list2 = list1.map(i=> i+"_x", i+"_y")
但是斯卡拉说我的论点太多了。这很接近:
val list2 = list1.map(i=> (i+"_x", i+"_y"))
但它产生了List((" a_x"," a_y"),(" b_x"," b_y"),(& #34; c_x"," c_y"))这不是我想要的。我确信我错过了一些明显的东西。
答案 0 :(得分:6)
您希望flatMap
首先映射,然后将结果的结构展平为平面列表。每个单独的结果本身必须是一个集合(而不是元组):
scala> List("a", "b", "c").flatMap(i => List(i + "-x", i + "-y"))
res0: List[String] = List(a-x, a-y, b-x, b-y, c-x, c-y)
答案 1 :(得分:6)
理解:
scala> val prefixes = List("a", "b", "c")
prefixes: List[String] = List(a, b, c)
scala> val suffixes = List("x", "y")
suffixes: List[String] = List(x, y)
scala> for (prefix <- prefixes; suffix <- suffixes) yield prefix + "_" + suffix
res1: List[String] = List(a_x, a_y, b_x, b_y, c_x, c_y)
这基本上只是Seth Tisue回答的语法糖。