代码之家  ›  专栏  ›  技术社区  ›  Dimon

按日期属性对对象列表排序[复制]

  •  0
  • Dimon  · 技术社区  · 6 年前

     class AnObject{
         Long  attr;
     }
    
     List<AnObject> list; 
    

    我知道可以用一个对象的自定义比较器来完成。难道没有现成的东西来处理这种案子吗?有点

     Collections.sort(list, X.attr ) ;
    
    0 回复  |  直到 6 年前
        1
  •  140
  •   JB Nizet    9 年前

    假设你真的有 List<AnObject>

    list.sort(Comparator.comparing(a -> a.attr));
    

    如果通过不使用公共字段,而是使用访问器方法,使代码变得更干净:

    list.sort(Comparator.comparing(AnObject::getAttr));
    
        2
  •  19
  •   Alex    7 年前

    list.sort(Comparator.comparing(AnObject::getAttr));
    

    可能会引发NPE。

    如果还想对空值进行排序,可以考虑

        list.sort(Comparator.comparing(a -> a.attr, Comparator.nullsFirst(Comparator.naturalOrder())));
    

        list.sort(Comparator.comparing(a -> a.attr, Comparator.nullsLast(Comparator.naturalOrder())));
    

    它将把null放在第一位或最后一位。

        3
  •  7
  •   Warren Crasta    7 年前

    对于JB-Nizet和Alex的回答,空安全选项是执行以下操作:

    list.sort(Comparator.comparing(AnObject::getAttr, Comparator.nullsFirst(Comparator.naturalOrder())));
    

    list.sort(Comparator.comparing(AnObject::getAttr, Comparator.nullsLast(Comparator.naturalOrder())));