scala 中的推断参数类型
Inferred parameter types in scala
以下代码生成类型不匹配错误。我不明白为什么。
var navigablemap=rst.getFamilyMap("a".getBytes())
var list = new ListBuffer[Long]()
navigablemap.keySet().forEach((e:Array[Byte]) => list+=Bytes.toLong(e))
navigablemap 具有类型 NavigableMap[Array[Byte], Array[Byte]]。
人们会期望 e 具有 Array[Byte]
类型
编译器报告以下错误消息。
类型不匹配;发现:Array[Byte] ⇒ list.type(底层类型 Array[Byte] ⇒ list.type)需要:java.util.function.Consumer[_ >: Array[Byte]]
更新:以下作品。
var keys=navigablemap.keySet()
var keysIterator=keys.iterator()
while (keysIterator.hasNext){
var e=keysIterator.next()
list+=Bytes.toLong(e)
}
由于简洁是我尝试学习 scala 的目标之一,是否有适用于上述内容的 scala-one-liner?
这是一个愚蠢的错误。正如 Lukasz 对这个问题的评论,scala lambdas 不能取代 java lambda。为了将来参考,这是可行的解决方案。
var navigablemap=rst.getFamilyMap("a".getBytes())
val list = new ListBuffer[Long]()
var keys=navigablemap.keySet()
val scalaKeys=asScalaSet(keys)
scalaKeys.foreach(x => list+=Bytes.toLong(x))
转换 asScalaSet
很重要。
以下代码生成类型不匹配错误。我不明白为什么。
var navigablemap=rst.getFamilyMap("a".getBytes())
var list = new ListBuffer[Long]()
navigablemap.keySet().forEach((e:Array[Byte]) => list+=Bytes.toLong(e))
navigablemap 具有类型 NavigableMap[Array[Byte], Array[Byte]]。 人们会期望 e 具有 Array[Byte]
类型编译器报告以下错误消息。
类型不匹配;发现:Array[Byte] ⇒ list.type(底层类型 Array[Byte] ⇒ list.type)需要:java.util.function.Consumer[_ >: Array[Byte]]
更新:以下作品。
var keys=navigablemap.keySet()
var keysIterator=keys.iterator()
while (keysIterator.hasNext){
var e=keysIterator.next()
list+=Bytes.toLong(e)
}
由于简洁是我尝试学习 scala 的目标之一,是否有适用于上述内容的 scala-one-liner?
这是一个愚蠢的错误。正如 Lukasz 对这个问题的评论,scala lambdas 不能取代 java lambda。为了将来参考,这是可行的解决方案。
var navigablemap=rst.getFamilyMap("a".getBytes())
val list = new ListBuffer[Long]()
var keys=navigablemap.keySet()
val scalaKeys=asScalaSet(keys)
scalaKeys.foreach(x => list+=Bytes.toLong(x))
转换 asScalaSet
很重要。