- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个枚举集
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/
有许多关于类似错误的类似问题,但它们都是关于在尝试创建该类型的 EnumSet 之前枚举类型尚未初始化的特定情况。我的问题非常非常基本。无论我尝试做的事情多么简单,我都无法获得任何 EnumSet 方
我有一个枚举集 public static Set getTypes() { return EnumSet.of( TYPE_1, TYPE_2
此代码可以工作,但带有 try/catch 框 。 public enum AccentuationUTF8 {/** */ é, /** */è, /** */ç, /** */à,
我有两个 EnumSet。 我想将某些值从一个对象转移到另一个对象,但在两个对象中保留那些被视为“不可移动”的值。示例代码... Public enum MaterialTypes { ST
假设我想做如下的事情: public static Set setOf(V... elem) { Set set = null; if (elem[0] instanceof En
我刚刚开始学习 Java,并且正在研究一个可与一副纸牌配合使用的简单应用程序。目前,我正在尝试用枚举实例化一个 Suit 类。我想使用 EnumSet 功能,但我真的无法理解这里发生的事情。 我已经查
旧方法,如果我们想在一些复杂的位掩码上切换,我们可以很容易地这样做(我头脑中的一个随机示例只是为了演示这个问题): private static final int MAN = 0x0000000
我刚刚花了几个小时调试我的应用程序,而且我相信我偶然发现了一个(另一个 o_O)Java 错误...嗅探...我希望不是,因为这会让人难过:( 我正在做以下事情: 创建带有一些标志的 EnumSet
我正在写 writeToParcel方法和我的模型有一个 EnumSet作为属性。我不知道哪个out.write....()我必须使用这种类型吗? 最佳答案 EnumSet 实现了 Serializa
我正在读取一个二进制文件,该文件的值存储在位掩码中,包括 1 字节 位掩码 和 2 字节 位掩码。掩码中的每一位都充当一个开关,指示事件发生的位置。 Example of 1 Byte mask: 0
javadoc还有这个question都强调 Enum sets are represented internally as bit vectors. 现在我想知道 - 通过网络将(标准 Java 序
我有两个实现通用接口(interface)的枚举。我已尝试声明接口(interface),因此只有枚举可以实现它。 interface CommonEnumInterface> { /** I
我找不到 Immutable EnumSet 的版本.两个问题: 我可以在普通的 Guava ImmutableSet 中使用枚举吗? 如果可以的话,使用 ImmutableSet 而不是 EnumS
我正在努力解决 EnumSet因为它令人惊讶地没有简单的构造函数,而且它的方法也不喜欢空值。 我想出什么: EnumSet x = EnumSet.copyOf(Collections.emptySe
我有以下例子: import java.util.EnumSet; import java.util.Iterator; public class SizeSet { public stati
ConcurrentSkipListSet public class ConcurrentSkipListSet extends AbstractSet implements Navigabl
我正在使用 EnumSet 来执行按位权限操作,如《Effective Java》第 32 项中所建议的那样。这很好且简洁,但我需要提取数字位值,以便与需要数字的旧系统进行交互值(value)。使用
我想在一个枚举中存储不同的枚举类型。 这是正确(最短)的方法吗? public enum MyEnums { all(EnumSet.of(Color.red, Shape.round));
我正在尝试找到一种方法来使用该枚举类中的多个对象填充数组或其他一些数据结构(例如 EnumSet)。例如,我有一个枚举类,其中包含周一、周二、周三、周四等值。我想要做的是找到一种方法来多次使用这些值填
我正在尝试构建一个“平面文件阅读器”。这些文件将有几个相关的列,例如“客户姓名”、“电话”等,但每个平面文件的列号都不同;此外,某些平面文件将具有其他文件没有的列。 我希望 FlatFileReade
我是一名优秀的程序员,十分优秀!