私はList<String>
とを持っていList<Integer>
ます。どちらも特定の順序になっています (リンクされています)。List<String>
名前とList<Integer>
その値が含まれています。
List<Integer>
サイズでソートするだけでList<String>
なく、値と名前がリンクされたままになるように順序を変更する方法はありますか?
が必要java.util.TreeMap<Integer,String>
です。これは、使用されるキーに応じて、キーの自然順序付け、またはComparator
マップ作成時に指定された に従ってソートさconstructor
れます。
List<NameAndValue>
2 つのリストの代わりに 1 つのリストを使用する必要があります (これらのデータが実際に表すものを反映するNameAndValueよりも適切な名前を見つけてください)。Java はオブジェクト指向言語です。オブジェクトを使用します。関連するデータを含み、メソッドとカプセル化で動作を提供します。
このクラスを取得すると、リストを名前、値、またはその両方で並べ替えることができ、必要に応じてフィールドを追加しても問題ありません。
-java.util.TreeMap<Integer, String>
を実装する which を使用できますSortedMap
。キーの自然な順序でソートします。
●java.util.Comparator<T>
仕分けにも使えます。
きれいなコードの観点から、これらが一緒に属し、この構造が別の場所で再利用できる場合、それらからクラスを作成し、 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 }
});
これを試すことができます:
次のようなカスタム 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);