java - 如何按枚举字段对对象列表进行排序?
问题描述
我有一个包含枚举字段的对象列表。
如何按字母顺序按枚举值对其进行排序?
例如,
static enum Level {
D,
C,
A,
B
}
static class Item {
Level level;
public Item(Level level) {
this.level = level;
}
}
public static void main(String[] args) {
Item item1 = new Item(Level.B);
Item item2 = new Item(Level.A);
Item item3 = new Item(Level.D);
Item item4 = new Item(Level.C);
List<Item> items = new ArrayList<>(List.of(item1, item2, item3, item4));
}
我希望订单是A,B,C,D
解决方案
name
返回枚举常量的名称,因此您可以在以下位置使用它Comparator.comparing
:
items.sort(Comparator.comparing(item -> item.level.name()));
在进一步考虑之后,我实际上并不认为这可能不是一个好的设计。如果这样做,则不能随意更改枚举常量名称,因为这也可能会更改排序顺序。如果其他人不知道您依赖枚举名称、读取您的代码并出于任何原因重命名常量(如果您使用 IDE 的重命名工具,重命名通常不会破坏事情),那么这尤其成问题,然后您的排序代码会以不同的顺序对它们进行排序,这可能会破坏许多其他事情。
推荐阅读
- mysql - MySQL fts 索引性能下降,直到 OPTIMIZE TABLE
- mongodb - Mongodb Compass 在对象的数组属性中查找 id
- kotlin - Kotlin junit MockK 亚军
- java - 在 Java 中,为什么 Function.identity() 是静态方法而不是其他方法?
- java - 如果 id 不存在,http put 请求应该返回什么?
- java - 我正在尝试使用 url xml 解析,但看起来我一直得到一个空的 xml
- snowflake-cloud-data-platform - 在不同的列上使用 Group By And Over 子句
- c# - 创建字典
, 元组 > 用于存储来自不同文件夹的多个 json 文件名和数据 - php - 当我尝试添加数据时,页面正在刷新。mysqli_stmt_close() 期望参数 1 为 mysqli_stmt
- postgresql - 在 Kubernetes 集群中使用 pgAdmin 访问数据库