首页 > 解决方案 > 如何按枚举字段对对象列表进行排序?

问题描述

我有一个包含枚举字段的对象列表。

如何按字母顺序按枚举值对其进行排序?

例如,

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

标签: java

解决方案


name返回枚举常量的名称,因此您可以在以下位置使用它Comparator.comparing

items.sort(Comparator.comparing(item -> item.level.name()));

在进一步考虑之后,我实际上并不认为这可能不是一个好的设计。如果这样做,则不能随意更改枚举常量名称,因为这也可能会更改排序顺序。如果其他人不知道您依赖枚举名称、读取您的代码并出于任何原因重命名常量(如果您使用 IDE 的重命名工具,重命名通常不会破坏事情),那么这尤其成问题,然后您的排序代码会以不同的顺序对它们进行排序,这可能会破坏许多其他事情。


推荐阅读