1

配列を名前で並べ替えようとしていますが、コードにレンガの壁があり、どうすればよいかわかりません。また、役立つものが見つかりません。私の主な問題は

     public void sortByLastName(){
         Collections.sort(list);
     }

これらの2つのコードは、2つの異なるクラスにありますが、それは問題ですか?

    public int compareTo(Person p){
    int compareResult = this.lastName.compareTo(p.lastName);
    if(compareResult == 0){
        return 0;
    }
        else
            if(compareResult > 0){
                return 1;
            }
            else
                return -1;
    }
}
4

4 に答える 4

3

複数の方法で何かを並べ替えたい場合は、比較関数を引数としてに渡すのが最善の方法であるとすぐに判断できますCollections.sort

public void sortByLastName(){
    Collections.sort(list, new Comparator<Person>() {
        public int compare(Person lhs, Person rhs){
            return lhs.lastName.compareTo(rhs.lastName);
        }
    } );
}
于 2013-03-26T00:28:59.383 に答える
0

あなたが試すことができます:

public int compareTo(Person p){
    return lastName.compareToIgnoreCase(p.lastName);
}
于 2013-03-26T00:33:27.537 に答える
0

メソッドはクラスcompareToに含まれている必要がありますPerson。あなたのPersonクラスはする必要がありimplement Comparable<Person>ます。Collections.sortその後動作します-

private static final class Person implements Comparable<Person> {

    private String firstName;
    private String lastName;

    public Person(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public int compareTo(Person o) {
        int c = getLastName().compareTo(o.getLastName());
        if (c != 0) {
            return c;
        }
        return getFirstName().compareTo(o.getFirstName());
    }

    @Override
    public String toString() {
        return getFirstName() + " " + getLastName();
    }

}

public static void main(String[] args) {
    final List<Person> people = new LinkedList<Person>();
    people.add(new Person("John", "Smith"));
    people.add(new Person("Hans", "Mustermann"));
    people.add(new Person("John", "Doe"));
    System.out.println(people);
    Collections.sort(people);
    System.out.println(people);
}

出力:

[John Smith, Hans Mustermann, John Doe]
[John Doe, Hans Mustermann, John Smith]
于 2013-03-26T00:35:38.450 に答える
-1

モデルクラスの特定の変数でオブジェクトのリストを並べ替える関数を作成しました。必要なものと直接一致しない場合もありますが、アイデアを取り入れることはできます。リフレクションを使用して、任意のデータ型の任意のクラスモデルを並べ替えることができます。

 public Vector sort(Vector list, String kelas, String s, String asc) throws NoSuchMethodException {

        try {
            // Creates an object of type Class which contains the information of
            // the class String
            Object[] obj = list.toArray();
            Object[] args = {};
            Class cl = Class.forName(kelas);
            Method toSort = cl.getMethod(s, null);
            if (asc.equalsIgnoreCase("desc")) {
                if (toSort.getReturnType().toString().equalsIgnoreCase("int") || toSort.getReturnType().toString().equalsIgnoreCase("double")) {
                    for (int i = 0; i < obj.length; i++) {
                        for (int j = i; j < obj.length; j++) {
                            try {
                                if (Double.parseDouble(toSort.invoke(obj[i], args).toString()) < Double.parseDouble(toSort.invoke(obj[j], args).toString())) {
                                    Object temp = obj[i];
                                    obj[i] = obj[j];
                                    obj[j] = temp;
                                }
                            } catch (IllegalAccessException ex) {
                                Logger.getLogger(DbBean.class.getName()).log(Level.SEVERE, null, ex);
                            } catch (IllegalArgumentException ex) {
                                Logger.getLogger(DbBean.class.getName()).log(Level.SEVERE, null, ex);
                            } catch (InvocationTargetException ex) {
                                Logger.getLogger(DbBean.class.getName()).log(Level.SEVERE, null, ex);
                            }
                        }
                    }
                } else {
                    for (int i = 0; i < obj.length; i++) {
                        for (int j = i; j < obj.length; j++) {
                            try {
                                if (toSort.invoke(obj[i], args).toString().compareToIgnoreCase(toSort.invoke(obj[j], args).toString()) < 0) {
                                    Object temp = obj[i];
                                    obj[i] = obj[j];
                                    obj[j] = temp;
                                }
                            } catch (IllegalAccessException ex) {
                                Logger.getLogger(DbBean.class.getName()).log(Level.SEVERE, null, ex);
                            } catch (IllegalArgumentException ex) {
                                Logger.getLogger(DbBean.class.getName()).log(Level.SEVERE, null, ex);
                            } catch (InvocationTargetException ex) {
                                Logger.getLogger(DbBean.class.getName()).log(Level.SEVERE, null, ex);
                            }
                        }
                    }
                }
            } else {
                if (toSort.getReturnType().toString().equalsIgnoreCase("int") || toSort.getReturnType().toString().equalsIgnoreCase("double")) {
                    for (int i = 0; i < obj.length; i++) {
                        for (int j = i; j < obj.length; j++) {
                            try {
                                if (Double.parseDouble(toSort.invoke(obj[i], args).toString()) > Double.parseDouble(toSort.invoke(obj[j], args).toString())) {
                                    Object temp = obj[i];
                                    obj[i] = obj[j];
                                    obj[j] = temp;
                                }
                            } catch (IllegalAccessException ex) {
                                Logger.getLogger(DbBean.class.getName()).log(Level.SEVERE, null, ex);
                            } catch (IllegalArgumentException ex) {
                                Logger.getLogger(DbBean.class.getName()).log(Level.SEVERE, null, ex);
                            } catch (InvocationTargetException ex) {
                                Logger.getLogger(DbBean.class.getName()).log(Level.SEVERE, null, ex);
                            }
                        }
                    }
                } else {
                    for (int i = 0; i < obj.length; i++) {
                        for (int j = i; j < obj.length; j++) {
                            try {
                                if (toSort.invoke(obj[i], args).toString().compareToIgnoreCase(toSort.invoke(obj[j], args).toString()) > 0) {
                                    Object temp = obj[i];
                                    obj[i] = obj[j];
                                    obj[j] = temp;
                                }
                            } catch (IllegalAccessException ex) {
                                Logger.getLogger(DbBean.class.getName()).log(Level.SEVERE, null, ex);
                            } catch (IllegalArgumentException ex) {
                                Logger.getLogger(DbBean.class.getName()).log(Level.SEVERE, null, ex);
                            } catch (InvocationTargetException ex) {
                                Logger.getLogger(DbBean.class.getName()).log(Level.SEVERE, null, ex);
                            }
                        }
                    }
                }
            }

            list = new Vector();
            for (int i = 0; i < obj.length; i++) {
                list.add(obj[i]);
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        return list;
    }

あなたはこれと同じくらい簡単にその関数を呼び出すことができます:

Vector sortedList=sort(UnsortedList, "bean.Items", "getItemName", "asc");

この行は、アイテム名の昇順に基づいてアイテムリスト(アイテムはモデルクラス)を並べ替えます

于 2013-03-26T01:07:58.253 に答える