对于某个项目,我必须按地区和名称订购一些数字。首先,它们按面积从大到小排序,如果它们一致,则按字母顺序排序。在一个名为RectangularRegion
的类中,我有一个类型如下的内部类:
//Inner Class
static class RectangularRegionComparator implements Comparator<RectangularRegion>{
@Override
public int compare(RectangularRegiono1, RectangularRegiono2) {
//Return a positive integer if the area of o1 is higher than o2 [we want o1 to go before o2 (o1 <o2)], a negative is o1 and less than o2 and 0 are equal, then we will sort by name from A to Z
if ((o1.Area() - o2.Area()) != 0){
return o1.Area() - o2.Area();
}
return o1.name.compareTo(o2.name);
}
}
如果我想从另一个类对一组矩形区域
进行排序,我该如何做?我认为最好的方法是下面的,但失败了(类型集合中的方法排序(List
public void ordenarRegionesXAreaAsc(){
Collections.sort(rex, new RectangularRegion.RectangularRegionComparator());
}
其中
私有集合
我做错了什么?
不能对集合
进行排序,因为此接口未对其元素施加顺序。
而是声明
private List<RegionRectangular> rex= new ArrayList<RectangularRegion>();
问题内容: 我正在创建一个简单的程序来了解Java Comparator类。我已经按顺序进行了排序,但是现在我想按降序对列表进行排序,但是由于使用了实现的内部类(歌曲是容纳getter和setter方法的歌曲类),在调用该方法时遇到了问题。 这是我的课程,里面包含分类过程等。 这是我的简单课程; 有人可以帮我弄清楚我将在类中调用该方法的地方,因为它无法编译? 问题答案: 编辑2015年7月 由于此
我知道这个问题有点简单,但我真的想知道为什么不去留档,假设我有这样的课。 } 两个静态方法都抛出一个错误,指出 修饰符“静态”仅允许在常量变量声明中使用 我知道医生说 这在Java语言规范部分§8.1.3中有描述 8.1.3内部类和封闭实例 但我的问题是,调用简单值或属性与调用静态方法(无论是公共方法还是私有方法)有什么区别?。为什么可以调用属性,但不能调用方法。 谢谢
问题内容: 我们有一些代码根据其坐标之间的距离对地址列表进行排序。这是通过使用自定义比较器的collections.sort完成的。 但是,列表中有时不包含地址,这会导致NullPointerException。解决这个问题的最初想法是让比较器返回至少0个坐标为零的地址的距离。我担心这可能导致列表中“有效”元素的顺序损坏。 因此是否可以在比较器中为空数据返回“ 0”值,还是有一种更干净的方法来解决
我有一个客户对象类,它有一些变量,并且已经实现了一个关于其中一个变量的比较器。然而,我需要为不同的变量last_name实现另一个比较器。 因为我的Customer类中不能有2个compareTo()方法,所以我决定在这里专门创建一个Comparing类 但一旦触及Collections.sort(客户); 它不会激活下面的公共int比较(Customer Customer_1,Customerc
问题内容: 我有5个字段的对象: 要排序的的我写了下面。 这是在具有多个要比较的对象的对象上实现的正确方法吗? 问题答案: 您的方法可能是正确的,但是效率低下(不必要地调用equals)并且难以阅读。可以这样重写: 更好的方法是使用库方法将所有这些逻辑抽象掉,这样您就不必考虑它了。例如使用apache.commons.lang CompareToBuilder
我想知道是否可以制作实现比较器接口的非静态内部类。 例如:。 我想使用比较器类非静态,因为我想使用非静态字段“num”并想修改它的值。有非静态比较器内部类可以吗? 附加信息 对于每个对象,我都在计算内部的分数,并进行相应的比较和排序。我需要将这些分数保存在我在comparator内计算的地图中,并希望在外部类中使用该地图进行进一步计算。