我有一份清单。我想排序超级列表取决于子列表大小。列表是动态的
列表类型为<ArrayList<ArrayList<HashMap>>>
例如。
[ [{key1=value1,key2=value2}],[],[{key1=value1}],[{key1=value1},{key2=value2},{key3=value3}] ]
排序后应显示
[[{key1=value1},{key2=value2},{key3=value3}], [{key1=value1,key2=value2}],[{key1=value1}],[] ]
你能帮忙解决这个问题吗?
提前致谢。
Laxman chowdary
答案 0 :(得分:7)
已编辑 :
如果要对按地图大小列表排序的地图列表列表进行排序,可以执行此操作。
请注意,您可以更改o1
中参数(o2
和Integer.valueOf(o1.size()).compareTo(o2.size())
)的顺序,以按递减顺序排序。
public static <T> List<? extends List<T>> sortListByValue(List<? extends List<T>> list) {
Collections.sort(list, new Comparator<List<T>>() {
@Override
public int compare(List<T> o1, List<T> o2) {
//return Integer.compare(o1.size(), o2.size()); //JDK7
//Use this if you're using a version prior to 1.7.
return Integer.valueOf(o1.size()).compareTo(o2.size());
}
});
return list;
}
public static void main(String[] args) {
ArrayList<Map<String,String>> list1 = new ArrayList<>();
list1.add(new HashMap<String, String>(){{ put("1", "a"); put("2", "b");}});
list1.add(new HashMap<String, String>(){{ put("1", "a"); put("2", "b"); put("3", "c");}});
list1.add(new HashMap<String, String>(){{ put("1", "a"); }});
ArrayList<Map<String,String>> list2 = new ArrayList<>();
list2.add(new HashMap<String, String>(){{ put("1", "a"); put("2", "b");}});
list2.add(new HashMap<String, String>(){{ put("1", "a"); put("2", "b"); put("3", "c");}});
ArrayList<Map<String,String>> list3 = new ArrayList<>();
list3.add(new HashMap<String, String>(){{ put("1", "a"); put("2", "b");}});
ArrayList<ArrayList<Map<String,String>>> list = new ArrayList<>();
list.add(list1);
list.add(list2);
list.add(list3);
System.out.println(list);
System.out.println(sortListByValue(list));
}
答案 1 :(得分:2)
Collections.sort(list, new Comparator<List<? extends Map>>() {
public int compare(List<? extends Map> list1, List<? extends Map> list2) {
return Integer.valueOf(list1.size()).compareTo(Integer.valueOf(list2.size()));
}
});
如果你没有那么多关注泛型,你可以简化它,如:
Collections.sort(list, new Comparator<List>() {
public int compare(List list1, List list2) {
return Integer.valueOf(list1.size()).compareTo(Integer.valueOf(list2.size()));
}
});
答案 2 :(得分:1)
public static <T> List<List<T>> sortBySublistSize(List<List<T>> superList) {
Collections.sort(superList, new Comparator<List<T>>() {
@Override
public int compare(List<T> o1, List<T> o2) {
return Integer.compare(o1.size(), o2.size());
}
});
return superList;
}
答案 3 :(得分:0)
您可以使用任何常规排序算法,而不是仅仅根据元素的长度来确定值。