Scala对象列表以逗号分隔的字符串

时间:2018-10-31 12:04:53

标签: java scala stream

从java.util.List [CustomObject]我想删除值并创建一个逗号分隔的字符串,尝试了以下代码,但出现了异常

片段1

def getVal(a_attribList: List[CustomObject]): String = a_attribList
    .stream()
    .map(new java.util.function.Function[CustomObject, String] {
        override def apply(CustomObject): String = {
            t.getNolumn
        }
    })
    .collect(Collectors.joining(","))

摘要2

def getVal(a_attribList: List[CustomObject]): String = {
    a_attribList
        .stream()
        .map(a => a.getNolumn)
        .collect(Collectors.joining(","));
}

例外

type mismatch;
 found   : java.util.function.Function[com.test.dataobjects.CustomObject,String]
 required: java.util.function.Function[_ >: com.test.dataobjects.CustomObject, _ <: R]
            .map(a => a.getNolumn)
                   ^
three errors found

3 个答案:

答案 0 :(得分:2)

映射所有字符串值,然后调用

.mkString(",")

答案 1 :(得分:2)

正如@ValentinCarnu指出的那样,这些代码段使用的是scala.collection.immutable.List而不是java.util.List
因此,您只需要使用standar scala匿名函数对其进行映射,然后使用mkString method

将其转换为String
def getVal(a_attribList: List[CustomObject]): String =
  a_attribList.map(a => a.getNolumn).mkString(",")

现在,如果您确实有一个Java列表,则可以使用convert it to a Scala list JavaConverters package

import scala.collection.JavaConverters._
def getVal(a_attribList: java.util.List[CustomObject]): String =
  a_attribList.asScala.map(a => a.getNolumn).mkString(",")

答案 2 :(得分:1)

您可以将其隐藏到scala列表中并进行映射:

a_attribList.asScala.map(_.getNolumn).mkString(",")
相关问题