2013-01-25 95 views
0

我希望它不是重複的問題,獲取排序鍵和值在地圖

我做了兩個班,「狗」和「序列」,

「狗」類使用一個比較器進行排序價格優先。 (正常完成)
「序列」類應該在地圖上添加排序價格列表(值)+(不重複的國家代碼爲「鑰匙」。這是我正確的給我。

在我的信息,地圖應該排序在明確升序鑰匙,但是這是不是這樣,看到輸出

我的目標是在類絲氨酸現在已經整理國家代碼與價格的對應值

class Dog implements Comparator<Dog>, Comparable<Dog> { 
    private int CountryCode; 
    private double Price; 
    private String Operator; 

    Dog() { 
    } 

    Dog(int c, double p, String o) { 
     CountryCode = c; 
     Price = p; 
     Operator = o; 
    } 

    public int getCountryCode() { 
     return CountryCode; 
    } 

    public double getPrice() { 
     return Price; 
    } 

    public String getOperator() { 
     return Operator; 
    } 

    // Overriding the compareTo method 
    public int compareTo(Dog d) { 

     double de = Price - d.getPrice(); 

     if (de > 0.00001) 
      return 1; 
     if (de < 0.00001) 
      return -1; 
     return 0; 

    } 

    // Overriding the compare method to sort by price 
    public int compare(Dog d, Dog d1) { 

     double de = d.getPrice() - d1.getPrice(); 

     if (de > 0.00001) 
      return 1; 
     if (de < 0.00001) 
      return -1; 
     return 0; 
    } 

    @Override 
    public String toString() { 
     return " " + Price + ":" + Operator + ""; 
    } 

} 

public class Ser { 
    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     // Takes a list o Dog objects 

     ArrayList<Dog> list1 = new ArrayList<Dog>(); 
     Map<Integer, Dog> mp = new HashMap<Integer, Dog>(); 

     list1.add(new Dog(1, 0.9, "A")); 
     list1.add(new Dog(268, 5.1, "A")); 
     list1.add(new Dog(46, 0.17, "A")); 
     list1.add(new Dog(4620, 0.0, "A")); 
     list1.add(new Dog(468, 0.15, "A")); 
     list1.add(new Dog(4631, 0.15, "A")); 
     list1.add(new Dog(4673, 0.9, "A")); 
     list1.add(new Dog(46732, 1.1, "A")); 

     list1.add(new Dog(1, 0.92, "B")); 
     list1.add(new Dog(44, 0.5, "B")); 
     list1.add(new Dog(46, 0.02, "B")); 
     list1.add(new Dog(467, 1.0, "B")); 
     list1.add(new Dog(48, 1.2, "B")); 

     list1.add(new Dog(1, 0.9, "c")); 
     list1.add(new Dog(44, 0.4, "c")); 
     list1.add(new Dog(46, 0.01, "c")); 
     list1.add(new Dog(467, 0.2, "c")); 

     // Sorts the array list using comparator 

     Collections.sort(list1, new Dog()); 

     System.out.println("Sort the Dog class with respect to Price"); 

     for (Dog a : list1) 
      // printing the sorted list of ages 
      System.out.println(a.getCountryCode() + " : " + a.getPrice() 
        + " : " + a.getOperator()); 

     // Add only those keys from sorted Price but if the key is added, don't 
     // repeat it 
     for (int i = 0; i < list1.size(); i++) { 
      if (!mp.containsKey(list1.get(i).getCountryCode())) 
       mp.put(list1.get(i).getCountryCode(), list1.get(i)); 

     } 

     System.out.println(""); 

     System.out.println(" Get Sorted List of Keys and values"); 

     for (Map.Entry<Integer, Dog> e : mp.entrySet()) { 

      System.out.println(e.getKey() + "" + e.getValue()); 

     } 

    } 
} 

輸出:排序關於價格的狗類

4620 : 0.0 : A, 46 : 0.01 : c, 46 : 0.02 : B, 4631 : 0.15 : A, 468 : 0.15 : A, 46 : 0.17 : A, 467 : 0.2 : c, 44 : 0.4 : c, 44 : 0.5 : B, 1 : 0.9 : c, 4673 : 0.9 : A, 1 : 0.9 : A, 1 : 0.92 : B, 467 : 1.0 : B, 46732 : 1.1 : A, 48 : 1.2 : B, 268 : 5.1 : A 

獲取密鑰的排序清單和相應的值

4673 0.9:A, 1 0.9:c, 46732 1.1:A, 48 1.2:B, 4631 0.15:A, 4620 0.0:A, 468 0.15:A, 46 0.01:c, 467 0.2:c, 268 5.1:A, 44 0.4:c 
+1

第一件事,如果你已經實現了'Comparable',你不需要'Comparator'。其次,將「價格」存儲在「雙」中是一種犯罪行爲。 –

+1

使用名稱像CountryCode而不是countryCode的變量也是一種犯罪;) – emka86

+0

這是根據java conventaion –

回答