嵌套List示例: [[“aa”,”bb”,”2”,”nn”],[“aa”,”bb”,”12”,”nn”],[“aa”,”bb”,”20”,”nn”],[“aa”,”bb”,”32”,”nn”],[“aa”,”bb”,”23”,”nn”],[“aa”,”bb”,”52”,”nn”]] 我们想针对列表的第三个字段也就是index=2的进行排序。 排序之后输出的结果还是嵌套List,只是输出的顺序发生变化。 尝试过几种方式,最终锁定了TreeMap来完成排序操作。 代码如下:
package JavaHeap; import java.util.ArrayList; import java.util.Comparator; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import java.util.TreeMap; public class sort { public static void main(String[] args) { List<String> ll = new ArrayList<>(); List<List<String>> list = new ArrayList<List<String>>(); ll.add("aa"); ll.add("bb"); ll.add("2"); ll.add("nn"); list.add(ll); ll = new ArrayList<>(); ll.add("aa"); ll.add("bb"); ll.add("32"); ll.add("nn"); list.add(ll); ll = new ArrayList<>(); ll.add("aa"); ll.add("bb"); ll.add("22"); ll.add("nn"); list.add(ll); System.err.println(list); List<List<String>> li = OrderByEvgDesc(list); System.err.println(li); } private static List<List<String>> OrderByEvgDesc(List<List<String>> list1) { List<List<String>> list = new ArrayList<List<String>>(); Map<Integer, List<String>> map = new TreeMap<Integer, List<String>>( new Comparator<Integer>() { public int compare(Integer obj1, Integer obj2) { // 降序排序 return obj2.compareTo(obj1); } }); for (int i = 0; i < list1.size(); i++) { map.put(Integer.parseInt(list1.get(i).get(2)), list1.get(i)); } Set<Integer> keySet = map.keySet(); Iterator<Integer> iter = keySet.iterator(); while (iter.hasNext()) { Integer key = iter.next(); list.add(map.get(key)); } return list; } }运行结果:
排序之前:[[aa, bb, 2, nn], [aa, bb, 32, nn], [aa, bb, 22, nn]] 排序之后:[[aa, bb, 32, nn], [aa, bb, 22, nn], [aa, bb, 2, nn]]补充: TreeMap:基于红黑树(Red-Black tree)的 NavigableMap 实现,该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法。