2013-01-25 62 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; 
    } 

} 
相關問題