5

私はList<String>とを持っていList<Integer>ます。どちらも特定の順序になっています (リンクされています)。List<String>名前とList<Integer>その値が含まれています。

List<Integer>サイズでソートするだけでList<String>なく、値と名前がリンクされたままになるように順序を変更する方法はありますか?

4

5 に答える 5

15

が必要java.util.TreeMap<Integer,String>です。これは、使用されるキーに応じて、キーの自然順序付け、またはComparatorマップ作成時に指定された に従ってソートさconstructorれます。

于 2012-11-23T10:24:24.400 に答える
14

List<NameAndValue>2 つのリストの代わりに 1 つのリストを使用する必要があります (これらのデータが実際に表すものを反映するNameAndValueよりも適切な名前を見つけてください)。Java はオブジェクト指向言語です。オブジェクトを使用します。関連するデータを含み、メソッドとカプセル化で動作を提供します。

このクラスを取得すると、リストを名前、値、またはその両方で並べ替えることができ、必要に応じてフィールドを追加しても問題ありません。

于 2012-11-23T10:24:49.423 に答える
2

-java.util.TreeMap<Integer, String>を実装する which を使用できますSortedMapキーの自然な順序でソートします。

java.util.Comparator<T>仕分けにも使えます。

于 2012-11-23T10:27:34.847 に答える
1

きれいなコードの観点から、これらが一緒に属し、この構造が別の場所で再利用できる場合、それらからクラスを作成し、 Comparable を実装する必要があります。

public SomeClass implements Comparable<SomeClass> {

    private Integer id;
    private String name;

    private Whatever elseIsNeededHere;

    /* getters'n'setters*/

    // ******** THOU SHALT NEVER FORGET THY FRIENDS, EQUALS AND HASHCODE, OR ELSE THEY TURN TO BE THY FOES ********
    @Override
    public boolean equals(Object other) { //do what it takes }

    @Override
    public int hashCode() { //do what it takes! }

    /* actually implement Comparable */
    @Override 
    public int compareTo(SomeClass o) {
        //null check, and other bloat left out for sake of brevity
        return this.id.compareTo(o.getId());
    }

}

次に、一緒に属するものを含む単一のリストを作成し、それを非常にうまく並べ替えることができます

ArrayList<SomeClass> myList = getMyData();
Collections.sort(myList);

そして、myListリスト インスタンスは希望どおりに並べ替えられます。

別の比較方法が必要な場合は、Comparatorsを使用して別の方法を使用できます。

Collections.sort(myList,new Comparator<SomeClass>() { 
    public int compare(SomeClass a, SomeClass b) { // do what it takes }
    });
于 2012-11-23T10:37:55.470 に答える
0

これを試すことができます:

次のようなカスタム Comprator クラスを作成します。

import java.util.Comparator;

/**
 * Created by Maddy Sharma on 7/17/2015.
 * Contains sorting logic to sort Dialogs by its date(long)
 */
public class DateDialogComparator implements Comparator<UserChatDialog>{

// lhs.getLastMessageDateSent() is the long value

    @Override
    public int compare(UserChatDialog lhs, UserChatDialog rhs) {
    // This line will work in java 7 and Android API Level 19
    //    return Long.compare(lhs.getLastMessageDateSent(), rhs.getLastMessageDateSent());


                              'OR'


        if(lhs.getLastMessageDateSent()>rhs.getLastMessageDateSent())
            return -1;
        else if(lhs.getLastMessageDateSent()<rhs.getLastMessageDateSent())
            return +1;
        return 0;
    }
}

次のようなアクティビティまたはフラグメントから呼び出します。

ArrayList<UserChatDialog> myList = userChatDialogList;
Collections.sort(myList, new DateDialogComparator());
Log.i("List after sorting is:", "" + userChatDialogList);
于 2015-07-17T10:36:00.033 に答える