Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Java与Scala混合使用可变树映射_Scala_Sorting_Treemap_Mutable - Fatal编程技术网

将Java与Scala混合使用可变树映射

将Java与Scala混合使用可变树映射,scala,sorting,treemap,mutable,Scala,Sorting,Treemap,Mutable,在Java中,我可以执行以下操作: TreeMap<Double, String> myMap = new TreeMap<Double, String>(); 如何在Scala中实现Java comparator,以便根据升序或降序进行排序?在这里,我假设不能将Scala排序特性与Java集合混合使用。另外,有人知道Scala中是否/何时会出现可变树映射吗?您可以使用排序,并定义反向排序,如下所示: var treeMap = new java.util.TreeMa

在Java中,我可以执行以下操作:

TreeMap<Double, String> myMap = new TreeMap<Double, String>();

如何在Scala中实现Java comparator,以便根据升序或降序进行排序?在这里,我假设不能将Scala排序特性与Java集合混合使用。另外,有人知道Scala中是否/何时会出现可变树映射吗?

您可以使用
排序
,并定义
反向排序
,如下所示:

var treeMap = new java.util.TreeMap[Double,MyObject]
case class ReverseOrder[T: Ordering] extends Comparator[T] {
  def compare(o1: T, o2: T) = -implicitly[Ordering[T]].compare(o1, o2)
}

val treeMap = new TreeMap[Double, String](ReverseOrder[Double]) 

Scala trait
排序
扩展了Java接口
比较器
,因此您可以简洁地执行此操作:

val treeMap = new java.util.TreeMap[Double, String](Ordering.Double.reverse)

谢谢看起来它可能需要显式地是case类ReverseOrder[T:Ordering]扩展了java.util.Comparator[T]{@Bruce:它也可以是普通(非case)类,但是您需要编写这个无聊的
new
关键字,比如:
newreverseOrder[Double]
:)无需定义类-只需使用
排序。反向
。请参阅@Mike提供的答案。或使用
java.util.Collections.reverseOrder()
。TreeMap是可变的吗?我们如何用可变实现来实现它?一般建议:在开始Java实现之前,先查阅Scala API。@Raphael。一般来说,这是一个很好的建议。但是,我目前仍然完全被Scala API所淹没。环顾四周,我也知道目前没有可变的cala TreeMap。我倾向于只使用Scala,但这似乎是我除了包含一些Java之外别无选择的情况之一。几个星期前,我也意识到缺少可变的SortedMap。有人应该添加一个。或者任何人都知道有一个库?嗯,的确如此。也没有可变的
SortedSet
。奇怪的是,我打赌有一些事情正在进行中。好吧,确保你真的需要易变性。通过OO/命令式编程,你可以很容易地欺骗自己,让自己相信你确实需要易变性,而你真的不需要。已经为此颁发了一张罚单,并分配给了社区-。任何知道如何编写好的易变红黑树的人Scala/Java,或者一种高效的替代方案,是很受欢迎的。
case class ReverseOrder[T: Ordering] extends Comparator[T] {
  def compare(o1: T, o2: T) = -implicitly[Ordering[T]].compare(o1, o2)
}

val treeMap = new TreeMap[Double, String](ReverseOrder[Double]) 
val treeMap = new java.util.TreeMap[Double, String](Ordering.Double.reverse)