【问题标题】:Scala List of Objects to comma separated String以逗号分隔的字符串的 Scala 对象列表
【发布时间】:2019-04-04 14:16:57
【问题描述】:

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

sn-p 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(","))

sn-p 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

【问题讨论】:

    标签: java scala stream


    【解决方案1】:

    正如@ValentinCarnu 已经指出的那样,sn-ps 正在使用scala.collection.immutable.List 而不是java.util.List
    因此,您只需要使用标准 scala 匿名函数对其进行映射,然后使用 mkString method 将其转换为字符串

    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】:

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

      .mkString(",")
      

      【讨论】:

        【解决方案3】:

        您可以将其转换为 scala List 并进行映射:

        a_attribList.asScala.map(_.getNolumn).mkString(",")
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-07-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多