java List的排序

項目中輸出報表時,需要對List<String>進行排序。由於報表數據是分段獲取的,不能在獲取時排序,只能在輸出時排序。

有兩種情況,一種是表頭排序,另一種數據。

表頭,可以使用如下方法,先定義原始數據表頭,在輸出時位於第幾列:

    private static final Map<String,Integer> PERSONAL_SORT = new HashMap<>();
    static {
        PERSONAL_SORT.put("表頭1", 16);//原始數據第一列,輸出時顯示在第16列
        PERSONAL_SORT.put("表頭2", 10);
        PERSONAL_SORT.put("表頭3", 5);
        PERSONAL_SORT.put("表頭4", 9);
        PERSONAL_SORT.put("表頭5", 8);
        PERSONAL_SORT.put("表頭6", 2);
        PERSONAL_SORT.put("表頭7", 6);
        PERSONAL_SORT.put("表頭8", 3);
        PERSONAL_SORT.put("表頭9", 14);
        PERSONAL_SORT.put("表頭10", 7);
        PERSONAL_SORT.put("表頭11", 15);
        PERSONAL_SORT.put("表頭12", 11);
        PERSONAL_SORT.put("表頭13", 12);
        PERSONAL_SORT.put("表頭14", 13);
        PERSONAL_SORT.put("表頭15", 4);
        PERSONAL_SORT.put("表頭16", 1);
    }
再進行排序(selColumnsList是需要排序的對象):
Collections.sort(selColumnsList, new Comparator<String>() {
    @Override
    public int compare(String s, String t1) {
        if(PERSONAL_SORT.get(s) >PERSONAL_SORT.get(t1)) {
            return 1;
        }else
        {
            return -1;
        }
    }
});

數據部分,原始數據是一行行的生成的,因此可以在原始數據的每一行生成後,進行順序調換。

先定義一個數組,用來描述每一行,從原始數據的哪個列取值:

//第5列從原始數據的第20列取值,第6列從原始數據第10列取值
private static int[] COLUMNS_SORT2 = {1,2,3,4,20,10,12,19,7,11,14,9,8,6,16,17,18,13,15,5};

再進行順序調換:

private static List<String> SortList(List<String> list, int[] order) {
        if(list.size() != order.length)
            //如果指定順序的數組和原始數據長度不一致,直接返回原始數據
            return list;
        else
        {
            List<String> newList = new ArrayList<>();
            for(int i=0;i<order.length;i++)
            {
                newList.add(list.get(order[i]-1));
            }
            return newList;
        }
    }

當然,表頭也可以用數據的排序方法進行順序調整,效率應該更高,只是用上面的方法更加直觀。

上面表頭順序和數組都可以寫在配置文件裏面,方便調整。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章