java List实体排序

对于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}]
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值