【问题标题】:How to sort a list of objects by an enum field?如何按枚举字段对对象列表进行排序?
【发布时间】:2021-07-01 13:31:46
【问题描述】:

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

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

例如,

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


【解决方案1】:

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

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

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

【讨论】:

  • 感谢清道夫!
  • @Elimination 在进一步考虑之后,我实际上并不认为这可能不是一个好的设计。如果您这样做,那么您将无法随意更改枚举常量名称,因为这也可能会更改排序顺序,而这可能是不需要的。如果不知道您依赖枚举名称的其他人读取您的代码并出于任何原因重命名常量,那么这尤其成问题,那么您的排序代码将以不同的顺序对它们进行排序,这可能会破坏其他事情。
猜你喜欢
  • 2021-06-07
  • 2016-07-01
  • 1970-01-01
  • 2021-05-10
  • 1970-01-01
  • 2011-01-09
  • 1970-01-01
  • 1970-01-01
  • 2015-03-30
相关资源
最近更新 更多