使用 Collections.sort(object) 比较 Long 值Long.compare( x , y )

2022-09-01 18:00:41

我试图按长对简单的对象列表进行排序 - 下面的内容不起作用,因为其中一个长字符串被推到顶部,仅仅是因为它以较小的数字开头。所以我正在寻找一种方法,直接按实际长线值对这些值进行排序。

当前的 obj 实现如下所示。在我使用的课程中,我称之为Collections.sort(trees);

public class Tree implements Comparable<Tree> {
    public String dist; //value is actually Long

    public int compareTo(Tree o) {
        return this.dist.compareTo(o.dist);
    }
}

答案 1

Long.compare( x , y )

如果你有一个想要对值进行排序的对象,并且它实现了Compeable,那么在Java 7+中,你可以使用Long.compare(long x,long y)(它返回一个int)。long)

例如:

public class MyObject implements Comparable<MyObject>
{
  public long id;

  @Override
  public int compareTo(MyObject obj) {
    return Long.compare(this.id, obj.id);
  }
}

在my_objects类似的地方打电话Collections.sort(my_objects)

  List<MyObject> my_objects = new ArrayList<MyObject>();
  // + some code to populate your list

答案 2

为什么不在那里存储一个长:

public class Tree implements Comparable<Tree> {
    public long dist; //value is actually Long

    public int compareTo(Tree o) {
        return this.dist<o.dist?-1:
               this.dist>o.dist?1:0;
    }
}

或首先比较字符串的长度,然后比较它们

public String dist; //value is actually Long
public int compareTo(Tree o) {
    if(this.dist.length()!=o.dist.length())
          return this.dist.length()<o.dist.length()?-1:1;//assume the shorter string is a smaller value
    else return this.dist.compareTo(o.dist);
}

推荐