如何根据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)
我有一个关注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)