簡體   English   中英

在地圖中獲取排序的鍵和值

[英]Getting sorted keys and values in the Map

我希望這不再是重復的問題,

我做了兩個課程,“狗”和“ Ser”,

“狗”類使用比較器首先對價格進行排序。 (正確完成)
“ Ser”類應在地圖中添加排序后的價格表(作為值)+(未重復的國家/地區代碼,例如“鍵”。

在我的信息中,Map應該按升序對鍵進行顯式排序,但是不是這種情況,請參見輸出。

我現在的目標是在Class Ser中將國家/地區代碼與相應的價格值進行排序

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());

        }

    }
}

輸出:根據價格對Dog類進行排序

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

這是問題所在:

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

HashMap不會將其元素按任何順序排序。 請嘗試使用TreeMap。 TreeMap具有一個使用Comparator的構造函數。

http://docs.oracle.com/javase/6/docs/api/java/util/TreeMap.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM