私は持っていArrayList<HashMap<String,String>>
ます。
HashMapsの配列の順序を変更する方法はありますか?たとえば、文字列 "firstName"がHashMap内にある場合、HashMapsのArrayListをその値で並べ替えることはできますか?明確にするために、HashMaps内でキーとオブジェクトを並べ替える必要はありません。Arraylist内でHashMapを注文する必要があります。
最善の方法は何ですか?
私は例からやろうとしました:
class MapComparator implements Comparator<HashMap<String, String>>
{
private final String key;
public MapComparator(String key)
{
this.key = key;
}
public int compare(HashMap<String, String> first,
HashMap<String, String> second)
{
// TODO: Null checking, both for maps and values
String firstName1 = first.get(key);
String firstName2 = second.get(key);
if(firstName1 == null)
if(firstName2 == null)
return 0;
else
return -1; // treat null as less than any non-null
else
if(firstName2 == null)
return 1; // treat null as less than any non-null
else
return firstName1.compareTo(firstName2);
}
}
および使用:
Log.e(THIS_FILE, "before ->" + addedRows);
Collections.sort(addedRows, new MapComparator("name"));
Log.e(THIS_FILE, "after ->" + addedRows);
そして何もソートされていません(文字aで始まるように1つの連絡先の名前を変更したことを確認するために、name = as ice:)のハッシュマップを最初にする必要があります):
> E/ContactsActivity(23571): before ->[{type=, contactID=4, name=Office
> O}, {type=, contactID=2912, name=Test Text Last}, {type=,
> contactID=2915, name=as ife:) Eng}, {type=, contactID=2914,
> name=life:) Rus}, {type=, contactID=2913, name=life:) Ukr}, {type=,
> contactID=2897, name=дима куплеватскиц}] E/ContactsActivity(23571):
> after ->[{type=, contactID=4, name=Office O}, {type=, contactID=2912,
> name=Test Text Last}, {type=, contactID=2915, name=as ife:) Eng},
> {type=, contactID=2914, name=life:) Rus}, {type=, contactID=2913,
> name=life:) Ukr}, {type=, contactID=2897, name=дима куплеватскиц}]