2014-09-21 93 views
2

我確實有一個User類,它實現了Comparable。在我將用戶列表添加到PriorityQueue<User>之後,他們應該優先選擇scores,但由於某些原因,他們不會。您能否幫我弄清楚爲什麼用戶沒有在我的Queue中排序?PriorityQueue命令不正確JAVA

更新:

我正在通過輪詢元素訪問隊列。 prioritisedUsers.poll()它總是隨訂單尊重隨機得分。

PriorityQueue<User> prioritisedUsers = userPriorityStrategy.computeUserPriority(users); 

while(!prioritisedUsers.isEmpty()){ 
    System.out.println(prioritisedUsers.poll().getPriorityScore()); 
} 

OUTPUT:

0.35036433736768735 
0.6619121139678329 
0.09520067929838127 
0.4013591573863 
0.6704568389588227 
0.5989900926939181 
0.7320779721160738 

感謝您的幫助!

public class User implements Comparable<User>{ 

    private long id; 
    private String fistName; 
    private String lastName; 
    private double priorityScore; 

    public User (long id, String firstName, String lastName){ 
     this.id = id; 
     this.fistName = firstName; 
     this.lastName = lastName; 
    } 

    public double getPriorityScore(){ 
     return this.priorityScore; 
    } 

    public void setPriorityScore(double priorityScore){ 
     this.priorityScore = priorityScore; 
    } 

    public long getId(){ 
     return this.id; 
    } 

    public String getFistName(){ 
     return this.fistName; 
    } 

    public String getLastName(){ 
     return this.lastName; 
    } 

    public int compareTo(User o) { 
     return (int) (this.getPriorityScore() - o.getPriorityScore()); 
    } 
} 


    public PriorityQueue<User> computeUserPriority(List<User> users) { 
     PriorityQueue<User> prioritisedUsers = new PriorityQueue<User>(users.size()); 
     for (User user : users) { 
      user.setPriorityScore(rand.nextDouble()); 
      prioritisedUsers.add(user); 
     } 
     return prioritisedUsers; 
    } 
+0

我跑在我的IDE評估查詢'prioritisedUsers.poll()'總是隨機得分。 – 2014-09-21 19:42:25

+0

我的不好,你是對的。 1+ – 2014-09-21 19:54:03

回答

5

我不太確定你的轉換爲(int)的效果不錯......因爲轉換爲int會隱式地丟棄任何小數。

如果我在錯誤的我不是,你可以試試

public int compareTo(User object) { 
if (this.getPriorityScore() < object.getPriorityScore()) 
    return -1; 
if (this.getPriorityScore() == object.getPriorityScore()) 
    return 0; 
return 1; 
} 

或可選擇地和更簡單:

public int compareTo(User o) { 
    return Double.compare(this.getPriorityScore(), o.getPriorityScore()); 
} 
+2

是的! 1+。或者更簡單的做'返回Double.compare(priorityScore,o.priorityScore);' – 2014-09-21 19:51:23

+0

是的...更好(+1)...考慮我的只是作爲一個教學方法,以更好的問題解釋... – 2014-09-21 19:52:31

+0

我希望你不要不介意,但我添加它作爲您的答案編輯。 – 2014-09-21 19:53:32