2015-07-10 55 views

回答

1

通过从TreeMap(这是一个有序映射)的隐式转换的使用,可以方便地实现这样的方法:

implicit class CustomizedSortedMap[A, +B](treeMap: TreeMap[A, B]) { 
    def getLatest(a: A): Option[B] = { 
    treeMap.to(a).lastOption.map(_._2) 
    } 
} 

val m = TreeMap(20150401 -> "A", 20150423 -> "B") 
println(m.getLatest(20150402)) // prints "Some(A)" 
println(m.getLatest(20150422)) // prints "Some(A)" 
println(m.getLatest(20150423)) // prints "Some(B)" 
println(m.getLatest(20150424)) // prints "Some(B)" 
+0

感谢您的快速反应。它按照我的预期工作,但我注意到“treeMap.to(a)”会生成一个新的TreeMap。那么,如果我经常调用getLatest方法,会产生许多临时TreeMap,它会有性能问题吗? – user1284795

+0

底层的数据结构是一棵红黑树,由于在我们的例子中'TreeMap'是不可变的,我敢肯定'to'操作的复杂性是对数的(所以它不会每次都复制你的整个树你称它),但如果你有严格的性能要求,那么你最好测量它。 – kosii

相关问题