专栏首页丑胖侠List列表按照对象进行排序

List列表按照对象进行排序

在某些业务场景下需要根据list列表中对象的字段进行排序。今天就以实例说明:

实体类

public class Product {
    private int discount;
    // 省略getter/setter方法
}

排序测试类

public class TestSortList {

    @Test
    public void test1(){
        List<Product> list = new ArrayList<>(3);
        Product p1 = new Product();
        p1.setDiscount(1);
        list.add(p1);

        Product p2 = new Product();
        p2.setDiscount(2);
        list.add(p2);

        Product p3 = new Product();
        p3.setDiscount(3);
        list.add(p3);

        Collections.sort(list, new Comparator<Product>() {
            @Override
            public int compare(Product o1, Product o2) {
                if(o1.getDiscount() > o2.getDiscount()){
                    return 1;
                } else if(o1.getDiscount() == o2.getDiscount()){
                    return 0;
                } else {
                    return -1;
                }
            }
        });

        for(Product product : list){
            System.out.println(product.getDiscount());
        }

    }
}

打印结果:

1
2
3

这样就完成了一个升序的排序。如果需要降序的排序秩序将o1.getDiscount() > o2.getDiscount()前后调换位置就可以了。

其他

在jdk8中,引入了lambda表达式的写法,因此排序部分代码可简化为:

Collections.sort(list, (o1, o2) -> {
     if(o2.getDiscount() > o1.getDiscount()){
         return 1;
     } else if(o1.getDiscount() == o2.getDiscount()){
         return 0;
     } else {
         return -1;
     }
 });

另外网络上也提供了通用的List排序工具方法,可自行参考学习。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 《Drools7.0.0.Final规则引擎教程》番外实例篇——activation-group的多FACT对象

    场景 当我们使用activation-group时,默认会执行优先级最高的一个规则,然后其他规则不再执行,这也是此属性的基本特性。那么,大家是否考虑过这样一个问...

    用户1161110
  • 以太坊中以太币及代币计量单位

    首先我们来看一下以太币单位之间的转换,以太币的最小单位为wei,1个eth相当于10的8次方wei。通常,大家也使用Gwei作为展示单位。比较常用的就是eth,...

    用户1161110
  • SpringBoot2.x系列教程(十)Json之基础使用详解

    JSON是一种轻量级的数据交换格式,易于阅读、编写、机器解析和生成。JSON采用完全独立于编程语言的文本格式,是一种理想的数据交换语言。在Spring Boot...

    用户1161110
  • 猫眼面经

    现场面试,地点在雍和航星园(雍和宫旁边,如果以后有机会在这上班,是不是天天跟上朝一样),面试的面试官给人的感觉都很好。从下午3点面到下午6点,3技术+1HR,当...

    牛客网
  • 『 懒人10分钟—Linux学习篇(三)』文件/目录的权限

    想必经常和服务器打交道的朋友,对于Linux可谓又爱又恨。对于项目组、运维人员、或者有多人需要对服务器进行操作的人,离不开Linux关于权限的管理。Linux的...

    23号杂货铺
  • 2018年Java程序员最新BAT面试题

    美的让人心动
  • 足够惊艳:神经网络可以逼近任意函数吗?

    神经网络可以强大到近似逼近任意函数吗?是的。有没有一种通俗易懂、图形化的方式证明呢?

    double
  • Exchange2013通讯组授权其他用户管理其中成员方法

    公司里的通讯组超级多,总是有员工申请更改通讯组中的成员,为了简化管理员的工作,可以把经常变更群组成员的群组管理员分配给相应的人员。

    BigYoung小站
  • 不用卖肾,你一样能体验类似iPhone X的Animoji

    2017将是值得铭记的一年。在这一年里,真假视频之间的界限开始消失。多亏了人工神经网络的出现,我们得以利用几帧视频合成假人,或者让任何人根据我们的想法说出任何话...

    企鹅号小编
  • Windows SDK编程基本框架

    在Windows平台下,最常见最流行的编程就是MFC编程了,在网上可以搜索出大把的MFC编程相关的文章,今天我们来讨论另外一种windows下的编程模式,即W...

    程序员互动联盟

扫码关注云+社区

领取腾讯云代金券