gpt4 book ai didi

java - EnumSet 可以按书面顺序返回值吗?

转载 作者:行者123 更新时间:2023-12-03 07:59:43 24 4
gpt4 key购买 nike

我有一个枚举集

public static Set<T> getTypes() {
return EnumSet.of(
TYPE_1,
TYPE_2,
TYPE_3
);
}

我想用 getter 方法从中获取值

当我尝试使用 foreach 循环获取程序中的值时,它们总是以错误的顺序出现。有没有办法让它们按照上面写的顺序正确排列?谢谢!

最佳答案

EnumSet 中元素的顺序与枚举常量的自然顺序(即它们声明的顺序)相同。

EnumSet
.of(DayOfWeek.SATURDAY, DayOfWeek.FRIDAY, DayOfWeek.THURSDAY)
.forEach(System.out::println);

输出:

THURSDAY
FRIDAY
SATURDAY

如果您需要与自然顺序不同的顺序,可以切换为使用 List 而不是 Set:

List
.of(DayOfWeek.SATURDAY, DayOfWeek.FRIDAY, DayOfWeek.THURSDAY)
.forEach(System.out::println);

输出:

SATURDAY
FRIDAY
THURSDAY

或者,如果您需要 Set 作为类型,您可以引入一个负责在 enum 中排序的属性,并使用 TreeSet提供一个基于此属性的Comparator

考虑以下虚拟枚举:

public enum MyEnum {
ONE(3), TWO(2), THREE(1);
private int order;

MyEnum(int order) {
this.order = order;
}

public int getOrder() {
return order;
}
}

将枚举成员存储到TreeSet中的示例:

Stream.of(MyEnum.ONE, MyEnum.TWO, MyEnum.THREE)
.collect(Collectors.toCollection(
() -> new TreeSet<>(Comparator.comparing(MyEnum::getOrder))
))
.forEach(System.out::println);

输出:

THREE
TWO
ONE

关于java - EnumSet 可以按书面顺序返回值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74716302/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com