簡體   English   中英

排序對象Java的ArrayList

[英]Sorting ArrayList of Objects Java

我有一個對象的ArrayList ,我想按它們的值排序。 基本上我有9種不同的數學函數(即f1(n) = log nf2(n) = nf3(n) = n log n等)。 我將值1插入到所有9個函數中,並將結果放在對象的ArrayList ,並附加了標簽,如下面的代碼所示。 我想對整個結果列表進行排序。

ArrayList<Object>val1 = new ArrayList<Object>();
        val1.add("f\u2081(1) = " + log(funcValues[0]));
        val1.add("f\u2082(1) = " + funcValues[0]);
        val1.add("f\u2083(1) = " + exponent(funcValues[0]));
        val1.add("f\u2084(1) = " + f4(funcValues[0]));
        val1.add("f\u2085(1) = " + squared(funcValues[0]));
        val1.add("f\u2086(1) = " + cubed(funcValues[0]));
        val1.add("f\u2087(1) = " + twoN(funcValues[0]));
        val1.add("f\u2088(1) = " + factorial(funcValues[0]));
        val1.add("f\u2089(1) = " + f9(funcValues[0]));

基本上,無論你在哪里看到log,funcValues,exponent,f4,squared等,這些都是計算數學函數答案的函數。 這個ArrayList的輸出是:

f 1(1)= 0.0
f 2(1)= 1
f 3(1)= 1.0
f 4(1)= 0.0
f 5(1)= 1
f₆(1)= 1.0
f₇(1)= 2.0
f₈(1)= 1
f₉(1)= 0.0

我只想對數字進行排序。 我試圖這樣做:

class ValuesSorted implements Comparator<Object> {

        @Override
        public int compare(Object v1, Object v2) {
            if ()
            return 0;
        }
    }

我被困在if語句中因為我不能做if(v1.getValue> v2.getValue)這樣的事情,因為我使用了9個不同的函數調用來拉取每個值。

Simply try
Collections.sort(testList);
Collections.reverse(testList);

http://docs.oracle.com/javase/7/docs/api/java/util/Collections.html

您正在嘗試跟蹤兩件事,即價值和標簽。 當您跟蹤兩個相關的事物時,請使用地圖。 在這種情況下,有序地圖,即TreeMap。

TreeMap map = new TreeMap<Double, String>();
// for each function, map.put(value, label), e.g.
map.put(log(funcValues[0]), "f\u2081(1)");
...
map.put(f4(funcValues[0]),"f\u2084(1)");
...
map.put(f9(funcValues[0]), "f\u2089(1)");

結果將按數值排序。 map.values()將按排序順序排列標簽。

class Pair<X,Y>{

    private X first;
    private Y second;

    Pair(X first,Y second){
        this.first=first;
        this.second=second;
    }

    public X getX() {
        return first;
    }

    public void setX(X first) {
        this.first = first;
    }

    public Y getY() {
        return second;
    }

    public void setY(Y second) {
        this.second = second;
    }


    public Comparator<Pair<X, Y>> getComparator(){
        return new Comparator<Pair<X, Y>>() {

            @Override
            public int compare(Pair<X, Y> o1, Pair<X, Y> o2) {
                double a=(Double) o1.getY();
                double b=(Double) o2.getY();
                if(a==b){
                    return 0;
                }else if(a>b){
                    return 1;
                }else{
                    return -1;
                }
            }
        };
    }

}

public class Main{

    public static void main(String[] arg){

        List<Pair<String,Double>> val1 = new ArrayList<Pair<String,Double>>();

        val1.add(new Pair<String,Double>("f\u2081(1) = ", 0.1));
        val1.add(new Pair<String,Double>("f\u2082(1) = ", 0.2));
        val1.add(new Pair<String,Double>("f\u2083(1) = ", 0.1));
        val1.add(new Pair<String,Double>("f\u2084(1) = ", 1.1));
        val1.add(new Pair<String,Double>("f\u2085(1) = ", 1.2));
        val1.add(new Pair<String,Double>("f\u2086(1) = ", 2.0));
        val1.add(new Pair<String,Double>("f\u2087(1) = ", 2.1));
        val1.add(new Pair<String,Double>("f\u2088(1) = ", 0.3));

        Collections.sort(val1,new Pair<String,Double>("",0.0).getComparator());

        for (Pair<String, Double> pair : val1) {
            System.out.println(pair.getX()+" "+pair.getY());
        }
    }
}

暫無
暫無

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

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