我正在使用scala尝试一些基本逻辑。我尝试了下面的代码,但它会引发错误。
scala> val data = ("HI",List("HELLO","ARE"))
data: (String, List[String]) = (HI,List(HELLO, ARE))
scala> data.flatmap( elem => elem)
<console>:22: error: value flatmap is not a member of (String, List[String])
data.flatmap( elem => elem)
预期产出:
(HI,HELLO,ARE)
有人可以帮我解决这个问题吗?
答案 0 :(得分:4)
你正在尝试对一个无法工作的元组进行flatMap。以下内容适用:
val data = List(List("HI"),List("HELLO","ARE"))
val a = data.flatMap(x => x)
答案 1 :(得分:2)
这在scala中非常简单:
val data = ("HI",List("HELLO","ARE"))
println( data._1 :: data._2 )
您正在使用哪种确切的数据结构?
如果您清楚自己的数据结构:
type rec = (String, List[String])
val data : rec = ("HI",List("HELLO","ARE"))
val f = ( v: (String, List[String]) ) => v._1 :: v._2
f(data)
答案 2 :(得分:2)
有几点意见:
目前,元组没有flatten
方法(除非您使用shapeless)。
flatMap
无法直接应用于元素和集合混合的元素列表。
在您的情况下,您可以将元素“HI”作为List
:
val data = List(List("HI"), List("HELLO","ARE"))
data.flatMap(identity)
或者,您可以定义一个函数来相应地处理混合元素类型:
val data = List("HI", List("HELLO","ARE"))
def flatten(l: List[Any]): List[Any] = l.flatMap{
case x: List[_] => flatten(x)
case x => List(x)
}
flatten(data)
答案 3 :(得分:1)
如果这就是你想要的:
val data = ("HI",List("HELLO,","ARE").mkString(""))
println(data)
>>(HI,HELLO,ARE)
答案 4 :(得分:1)
您正试图flatMap
Tuple2
current api
<{1}}中没有extract
如果您不想更改输入,可以Tuple2
val data = ("HI",List("HELLO","ARE"))
val output = (data._1, data._2(0), data._2(1))
println(output)
中的值并提取第二元组值的值,如下所示
func get365AcessToken() -> String {
let clientId = "bb5e40e8-1fcc-XXXXXXXXX"
let redirectUrl = "XXXXXXXXX-1fcc-47ac-b339-571a52d0f862://auth"
let authContext = ADAuthenticationContext.init(authority: "https://login.microsoftonline.com/common", error: nil)
authContext.acquireTokenWithResource("https://graph.windows.net", clientId: clientId, redirectUri: NSURL.init(string: redirectUrl)) { (result) in
print(result)
print(result.error.errorDetails)
print(result.accessToken)
}
authContext.parentController = self
return ""
}