java - 如何在scala中使用flatMap来对一组 "vals"进行分组

标签 java list scala flatmap

我是 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/

相关文章:

css - 使用 CSS3 过渡动画的有序列表中的选择器

scala - 解释对位图

scala 2.12.1 ClassNotFoundException 产品$类

c# - 在 Scala 中实现类似 LINQ 的功能

java - 禁用 SearchView 文本输入?

java - 需要编写Java转换器

java - 如何从 arrayList 中删除唯一元素

python - 包含元组的 If 语句以及从列表中删除元组

java - 访问列表中的父类

java - JTreeNode 中有两个图像?