当前位置: 首页 > 知识库问答 >
问题:

Java列表按一个字段排序,然后按某个特定值[重复]

岳嘉容
2023-03-14

我有一个列表:

List<A> aList

where A:
public class A{
private Long id;

private LocalDate created;

private AStatus status; //enum

...other fields
}
public enum AStatus{
    NEW, SEND, WAITING, CANCELLED
}

如何首先按DESC顺序对列表进行排序,然后我想让状态为NEW的元素作为第一个(然后是状态为其他AStatus的元素),比如:

1 10.12.2020 NEW
2 10.12.2020 SEND
3 10.12.2020 CANCELLED
4 08.12.2020 NEW
5 08.12.2020 NEW

共有1个答案

孙恩
2023-03-14

您可以创建一个自定义比较器,它通过创建的进行排序,然后通过是否status==Astatus的布尔值进行排序。新(记住-false在排序布尔值时位于true之前):

List<A> aList = // something...
    
// I assume these getters exist
aList.sort(Comparator.comparing(A::getCreated).reversed() 
                     .thenComparing(a -> a.getStatus() != AStatus.NEW)
);
 类似资料:
  • 问题内容: 我有一个包含3列的表格: 我想使用以下顺序来排序结果集,但首先要优先考虑那些具有较低优先级的行。结果应如下所示 问题答案: 还有MySQL 函数。 如果要对所有可能的值进行完整排序: 如果您只关心“核心”在前,而其他值则无关紧要: 如果要先按“核心”排序,然后按正常排序顺序按其他字段排序: 不过,这里有一些警告: 首先,我很确定这是仅mysql的功能-问题被标记为mysql,但您永远不

  • 问题内容: 我有一个带有数字值的字符串键数组,可用于具有每个标签出现次数的标签列表中,因此: 这是为了我可以按降序显示标签列表,因此: 我可以使用 arsort 通过出色的值进行反向排序,但是我还希望具有相同数字值的所有标签都按字母顺序排序,因此最终结果可以是: 有办法可以做到吗?我猜想 usort 可能是要走的路,但是我看了php.net上的示例,我的眼睛呆呆了!非常感谢!!! 问题答案: 看一

  • 我有一个我正在制作的纸牌游戏的高分数组列表。对于这个arraylist可以存储的分数数量需要有一个有限的限制,系统的用户可以定义这个限制(假设现在是10个)。arraylist中的对象中的字段是玩家的名称(字符串)、他们的分数(int)和玩家的(几乎)唯一的ID(Long,System.CurrentTimeMillis())。arraylist应该按分数排序,其中分数最低的是最好的。但是,如果a

  • 我试图实现对存储在列表中的对象字段值的排序。 我找到了下面的解决方案来比较字符串,但是我如何比较字符串值并相应地排序? 我想先排序"Y"状态值然后"N"

  • 问题内容: 我有一个从排序的csv创建的以下列表 我实际上想按两个条件对列表进行排序:首先按字段1中的值,然后按字段2中的值。我该怎么做? 问题答案: 像这样:

  • 我有以下代码: 我的问题是我想让我的列表按多个东西排序: 1。)将它们分组为未来事件和过去事件(通过检查ystem.current毫秒()是否大于结束时间戳)2。)通过开始升序排序未来事件3。)通过结束降序排序过去事件 我可以用Java 8 Lambda来做这件事吗?或者我需要另一种排序项目的方法吗?