如何根据scala中的条件从列表中获取值

how to get value from list based on condition in scala

我有一个关注val headers: List[HttpHeader]:

val someList = List(Server: Apache-Coyote/1.1, Set-Cookie: 
JSESSIONID=879sdf97f98s7f9a87dgssa7987; Path=/userApi/; HttpOnly)

现在我想从上面的列表中得到 879sdf97f98s7f9a87dgssa7987。所以我做了以下事情:

someList.iterator.filter(_.name.equals("Set-Cookie")).map { x => x.value }

但这并没有给出列表中的特定值。

import spray.http.HttpHeaders.`Set-Cookie`

val sessionId: Option[String] = someList.collectFirst {
  case h: `Set-Cookie` if h.cookie.name == "JSESSIONID" => h.cookie.content
}

现在只需适当处理 Option[String]

.collectFirst 就像 .filter.map.find.

的组合

首先,它按类型 Set-Cookie 过滤 headers。 其次,因为此时 HttpHeader 已经转换为 Set-Cookie,我们可以访问它的 .cookie 属性 并在我们的搜索谓词中使用它。 第三,我们要求找到名称为 JSESSIONID 的 cookie 并获取其值。

我让它工作的唯一方法如下(虽然我不喜欢使用 split 所以直到我们找到任何优雅的方法):

val sessionId = someList.filter(_.name.equals("Set-Cookie")).
map { x => x.value.split(";")(0).split("=")(1)}.headOption          
println("sessionId: "+sessionId.get)