以下代码生成类型不匹配错误。我不明白为什么。
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 具有类型数组[字节]
编译器报告以下错误消息。
类型不匹配; found:Array [Byte]⇒list.type(带底层类型Array [Byte]⇒list.type)必需:java.util.function.Consumer [_&gt ;: 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?
答案 0 :(得分:0)
这是一个愚蠢的错误。正如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
很重要。