【问题标题】:How can i get object from List如何从列表中获取对象
【发布时间】:2019-07-03 11:43:12
【问题描述】:

我需要从List(Map()) 获取对象User(1,Nick Holland,25,None),但我不明白如何

val a = request.body.asFormUrlEncoded.toSeq.map(a => a.map(b => b))

List(Map(name -> ArrayBuffer(), age -> ArrayBuffer(), deleteItem -> ArrayBuffer(User(1,Nick Holland,25,None)), action -> ArrayBuffer(remove)))

【问题讨论】:

  • 你能解释一下你真正的问题吗,你到底不明白什么? - 我的意思是,我怀疑你的列表总是只有一个元素,如果它是空的,如果有 2+ 值会发生什么? - 内部地图总是有相同的键?或者您确定密钥deleteItem 将永远存在? - 值将始终是用户的序列?再次,当有很多元素时会发生什么? - 你想得到什么值?,你只想要一个带有单个元素的val?,你想提取一个满足条件的所有用户的列表吗? - 最后,你尝试了什么?
  • 另外,我认为这与 Play 无关,除了您的列表来自请求。您可以只提供示例输入 (就像您已经做过的那样) 并解释预期的输出。您可以删除 Play 标记并将其保留为 Scala 唯一问题。 - 顺便说一句,我不使用Play*,但这个toSeq.map(a => a.map(b => b)) 对我来说似乎没有必要,至少maps 只是身份,不确定是否toSeq 也是多余的。
  • 问题是这样的:我正在尝试使用表单对按钮进行编程(导入 play.api.data.Form,play.api.data.Forms._)有两个按钮“添加”和“删除”。对于“添加”按钮输入必须填写。对于“删除”并不重要。当您单击“删除”按钮时,会发送一个带有空字段的 POST 请求。年龄和姓名。 name -> ArrayBuffer (), age -> ArrayBuffer (). 分别为 val formData: BasicForm = BasicForm.form.bindFromRequest.get 所以无法获取表单的内容,因为 Empty 的年龄和姓名给出 None。
  • 那么,为什么要使用 List 呢?如果总是有一个元素?,如果字段的类型不同,为什么不使用case class (with Optional fields) 而不是Map? - 正如我之前所说,我不使用游戏,所以我不是 100% 确定。但我认为您的请求输入数据建模错误。

标签: scala playframework


【解决方案1】:

试试

case class User(i: Int, str: String, i1: Int, opt: Option[String])
val l = List(Map("name" -> ArrayBuffer(), "age" -> ArrayBuffer(), "deleteItem" -> ArrayBuffer(User(1,"Nick Holland",25,None)), "action" -> ArrayBuffer("remove")))
l.head.apply("deleteItem").head //User(1,Nick Holland,25,None)

【讨论】:

  • 非常感谢,你帮了我很多。
  • 对不起傲慢,但是如何摆脱这个字符串年龄和名字(1和尼克霍兰德)并将其放入变量中:val id: Int = 1 val name: String ="Nick Holland"
  • val user = l.head.apply("deleteItem").head val id: Int = user.i val name: String = user.str(使用你的参数名称而不是我的istr,...)
  • 如果是case class User(id: Int, name: String, ...) 那么val id: Int = user.id val name: String = user.name ...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-24
  • 2019-02-06
  • 2020-11-23
  • 2020-09-11
  • 2011-06-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多