java List实体排序

来源:互联网 发布:mac编辑图片怎么保存 编辑:程序博客网 时间:2024/06/15 17:32

对于java实体集合排序这里总结了三种方法,第一种是通过原生支持的Comparator做排序,第二种是通过java8的Lambda表达式进行排序,第三种是使用apache-common的工具包进行排序。经测试都能达到想要的效果,相比而言,第三种代码可读性、易用性更强,推荐使用第三种。

第三种排序需要引入Apache-common的beanutils、collections包,maven如下

<dependency>    <groupId>commons-collections</groupId>    <artifactId>commons-collections</artifactId>    <version>3.2.2</version></dependency><dependency>    <groupId>commons-beanutils</groupId>    <artifactId>commons-beanutils</artifactId>    <version>1.9.3</version></dependency>

代码

public class TestCollections {    private List<Map<String, Object>> getDataList() {        Map<String, Object> map1 = new HashMap<>(3);        map1.put("id", 2);        map1.put("name", "小明");        Map<String, Object> map2 = new HashMap<>(3);        map2.put("id", 1);        map2.put("name", "小张");        Map<String, Object> map3 = new HashMap<>(3);        map3.put("id", 3);        map3.put("name", "小红");        List<Map<String, Object>> dataList = new ArrayList<>();        dataList.add(map1);        dataList.add(map2);        dataList.add(map3);        return dataList;    }    @Test    public void sort() {        List<Map<String, Object>> dataList = getDataList();        System.out.println("排序前:" + dataList);        // 第一种 Collections 进行降序排序        Collections.sort(dataList, new Comparator<Map>() {            @Override            public int compare(Map o1, Map o2) {                int id1 = Integer.parseInt(o1.get("id").toString());                int id2 = Integer.parseInt(o2.get("id").toString());                //按照id进行降序排列                return id2 - id1;            }        });        System.out.println("Collections降序排序后:" + dataList);        // 第二种 java8 Lambda表达式 进行正序排序        dataList = getDataList();        dataList.sort((Map o1, Map o2) -> {            int id1 = Integer.parseInt(o1.get("id").toString());            int id2 = Integer.parseInt(o2.get("id").toString());            return id1 - id2;        });        System.out.println("Lambda正序排序后:" + dataList);        // 第三种 工具包 进行降序排序        dataList = getDataList();        Comparator mycmp1 = ComparableComparator.getInstance();        //逆序        mycmp1 = ComparatorUtils.reversedComparator(mycmp1);        ArrayList<Object> sortFields = new ArrayList<>();        //主排序(第一排序)        sortFields.add(new BeanComparator("id", mycmp1));        // 创建一个排序链        ComparatorChain multiSort = new ComparatorChain(sortFields);        // 开始真正的排序,按照先主,后副的规则        Collections.sort(dataList, multiSort);        System.out.println("工具包降序排序后:" + dataList);    }}

运行结果

排序前:[{name=小明, id=2}, {name=小张, id=1}, {name=小红, id=3}]Collections降序排序后:[{name=小红, id=3}, {name=小明, id=2}, {name=小张, id=1}]Lambda正序排序后:[{name=小张, id=1}, {name=小明, id=2}, {name=小红, id=3}]工具包降序排序后:[{name=小红, id=3}, {name=小明, id=2}, {name=小张, id=1}]
原创粉丝点击