【发布时间】:2016-01-14 16:30:18
【问题描述】:
以下代码生成类型不匹配错误。我不明白为什么。
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 ?
【问题讨论】:
-
你认为
(e:Array[Byte])在做什么? (所以它不是关于推断的参数类型,而是明确的) -
你不是在scala中使用java api吗?你不能简单地传递需要 java lambda 的 scala lambda。
-
为什么编译器会认为类型不是
Array[Byte]?推断的类型与预期的(和指定的)类型不同。 -
@Łukasz 你能具体点吗?
标签: scala apache-spark hbase