2013-01-25 56 views
2

我有类(JavaBean的,如果你想这样称呼它是)如何排序长的ArrayList <Object>通过对象的属性在Java中

class Tweet{ 

private millis; //number of millis since 1970 
//other attributes and getters and setters, but i want to sort onlny by millis 

public long getMillis() { 
    return millis; 
} 

} 

比较器,可以大概看呈三角这样:

class TweetComparator implements Comparator { 
    @Override 
    public int compare(Tweet t1, Tweet t2) { 
    //something 
    //this doesn't work 
    //return t2.getMillis().compareTo(t1.getMillis()); 
    return ??;//what should be here? 
    } 

    } 

这将是节目

List<Tweet> tweets = new ArrayList<Tweet>(); 
tweets.add(...); //just fill the list 
//i need newest (with hightest millis value first) so I probably need to call reverse order 
Collection.reverse(tweets) 
Collection.sort(tweets, new TweetComparator()); 

我发现一些参考herehere。但我不知道如何完成我的代码。

+0

当你想你的注释掉的代码发生了什么? –

+0

@RohitJain写错误:can not compareTo(long)对原始类型long – user1097772

回答

9

你比较应类似于此

class TweetComparator implements Comparator<Tweet> { 
    @Override 
    public int compare(Tweet t1, Tweet t2) { 
     return Long.compare(t1.getMillis(), t2.getMillis()); 
    } 
} 

注意static int Long.compare是因为Java 7的

+0

好的谢谢,并使用其余的代码我的代码是好的? – user1097772

+0

Collection.reverse(推文)是不必要的 –

+0

确定吗?即使当我需要它打印它然后从最新到最旧(我的意思是从最高的毫米到最低的毫米值)? – user1097772

3

试试这个:

@Override 
    public int compare(Tweet t1, Tweet t2) { 

    return t1.getMillis().compareTo(t2.getMillis()); 

    } 

更改您钢厂varaible龙,如果你想用龙类的内置compareTo方法。 否则在内部比较方法中,比较下面的t1和t2中的毫秒。

long t1Val = t1.getMillis(); 
long t2Val = t2.getMillis(); 
return (t1Val<t2Val? -1 : (t1Val ==t2Val? 0 : 1)); 

(直接从原龙类)

+0

这写错误:不能compareTo(long)对原始类型long – user1097772

+0

@RohitJain我不知道如何upvoted它,你认为我的其余部分代码正确使用从Evgenyi Dorofeev使用的代码? – user1097772

+1

@ user1097772。是的,一切似乎都很好。但为什么你使用'Collections.reverse'?你只想对列表进行排序吗?还要记得在Evgenyi的回答中使用通用版本的Comparator。 –

4

Compare method Returns: a negative integer, zero, or a positive integer as the first argument is less than, equal to, >or greater than the second.

逻辑 -

if t1.millis > t2.millis 
    return -1; 
else if t1.millis < t2.millis 
    return +1; 

码 -

class TweetComparator implements Comparator<Tweet> { 
    @Override 
    public int compare(Tweet t1, Tweet t2) { 
     if(s1.i>s2.i) 
      return -1; 
     else if(s1.i<s2.i) 
      return +1; 
     return 0; 
    } 

} 
相关问题