有个ArrayList<ArrayList<String>> a,就是说以ArrayList为元素的ArrayList,想按照每个元素的size大小进行排序,元素的size越大越靠前。
比如,a = {{"a","b","c"},{"a,","b"},{"a,","b", "c","d"}},经过排序以后的结果应该是: b = {{"a,","b"},{"a","b","c"},{"a,","b", "c","d"}}。
感谢水木清华BBS的: JerryLead (小蚂蚁)

Code
import java.util.*;
public class ArraySort {
public static void main(String args[]){
ArrayList<ArrayList<String>> str = new ArrayList<ArrayList<String>>();
str.add(new ArrayList(Arrays.asList("abc","gdef","ghi","jkl")));
str.add(new ArrayList(Arrays.asList("abcd","gdefh")));
str.add(new ArrayList(Arrays.asList("aabc","agdef","aghi","cccc","dddd")));
Collections.sort(str,new Comparator(){
public int compare(Object origin, Object New){
int originSize = ((ArrayList<String>)origin).size();
int newSize = ((ArrayList<String>)New).size();
return originSize > newSize ? -1: ( originSize==newSize ? 0 : 1);
}
});
for(ArrayList<String> st : str)
{
System.out.println(st);
}
如果对上述问题进行“曲线救国”的话,可以参考下边这个对map按照value升序排序的程序,也就是说可以把元素ArrayList<String>赋值为map的key,把其个数赋值为map的value,然后利用该程序进行排序,然后再去用于构造一个新的ArrayList<ArrayList<String>> b,即想要的结果。

Code
/**
* @param h
* @return
* 实现对map按照value升序排序
*/
@SuppressWarnings("unchecked")
public static Map.Entry[] getSortedHashtableByValue(Map h) {
Set set = h.entrySet();
Map.Entry[] entries = (Map.Entry[]) set.toArray(new Map.Entry[set.size()]);
Arrays.sort(entries, new Comparator() {
public int compare(Object arg0, Object arg1) {
Long key1 = Long.valueOf(((Map.Entry) arg0).getValue().toString());
Long key2 = Long.valueOf(((Map.Entry) arg1).getValue().toString());
return key1.compareTo(key2);
}
});
return entries;
}