【思路】嵌套List针对某index进行排序

来源:互联网 发布:快手红人淘宝店铺大全 编辑:程序博客网 时间:2024/06/03 15:53

嵌套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 进行排序,具体取决于使用的构造方法。

0 0
原创粉丝点击