我是 Scala 新手,只是创建了一些示例来更好地理解它。我似乎无法在这里解决这个问题 - 我在我的 java 程序中创建了一个字符串列表,并在我的 scala 程序中使用这个列表。我从 java 类读取列表的 scala 代码看起来像这样。
private val stringList : Seq[List] = x.getStringName //gets the list from my java program.
字符串列表包含
["How", "Are", "You"].
我正在尝试找到一种方法将这些字符串添加到名为 a、b 和 c 的值中,以便稍后可以将它们作为参数传递给另一个函数。
val values = stringList.flatMap{
case x if (!stringList.isEmpty) =>
val a = /*should get the first string How*/
val b = /*should get the second string Are*/
val c = /*should get the third string You*/
case _ => None
}
getCompleteString(a,b,c);
但这不起作用。我给了我一个错误,说
"type mismatch; found : Unit required: scala.collection.GenTraversableOnce[?]"
我不知道为什么会发生这种情况。有人可以告诉我我在这里做错了什么吗?
如果代码看起来很脏,我很抱歉,但我是初学者,仍在尝试理解该语言。任何帮助表示赞赏。预先感谢您。
最佳答案
有很多方法可以做到这一点:
val a = stringList(0)
val b = stringList(1)
val c = stringList(2)
val (a, b, c) = stringList match {
case first :: second :: third :: _ => (first, second, third)
case _ => ("default for a", "default for b", "default for c") // default case..
}
第一种方法是 Java 式的,通过索引,但你必须检查元素是否存在,例如not-null 或其他什么。
第二个是使用元组,您可以一次分配多个值。如果列表至少有 3 个元素(第一个 case 语句),那么它们将被分配给 (a,b,c) 元组,然后你可以使用 a,b,c... 如果列表少于 3 个元素,将使用默认值(0,0,0)。
我确信在 Scala 中还有更多方法可以实现这一目标。
关于java - 如何在scala中使用flatMap来对一组 "vals"进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38243665/