【问题标题】:Filling a List with all enum values in Java用Java中的所有枚举值填充列表
【发布时间】:2013-04-15 11:21:45
【问题描述】:

我想用枚举的所有可能值填写一个列表
由于我最近爱上了EnumSet,所以我利用了allOf()

EnumSet<Something> all = EnumSet.allOf( Something.class);
List<Something> list = new ArrayList<>( all.size());
for (Something s : all) {
    list.add( s);
}
return list;

有没有更好的方法(如在非混淆的单衬里)来达到相同的结果?

【问题讨论】:

  • ArrayList list = new ArrayList(Arrays.asList(Something.values()))

标签: java list enums


【解决方案1】:
private ComboBox gender;
private enum Selgender{Male,Famle};
ObservableList<Object> observableList  =FXCollections.observableArrayList(Selgender.values());

【讨论】:

    【解决方案2】:

    你也可以使用:

    Collections.singletonList(Something.values())
    

    【讨论】:

    • 我正在获取 hexCode
    【解决方案3】:

    Class.getEnumConstants()

    List<SOME_ENUM> enumList = Arrays.asList(SOME_ENUM.class.getEnumConstants());
    

    【讨论】:

      【解决方案4】:

      我不会在一开始就使用 List,因为 EnumSet 更合适,但你可以这样做

      List<Something> somethingList = Arrays.asList(Something.values());
      

      List<Something> somethingList =
                       new ArrayList<Something>(EnumSet.allOf(Something.class));
      

      【讨论】:

      • 有时 EnumSet 不会删减它。特别是当订单很重要时
      • @MonoThreaded 你想到了什么顺序? EnumSet 是枚举的自然顺序。列表的顺序与集合的顺序相同,因此在此处使用列表不会改变任何内容。
      • 对不起,订购超出了这个问题的范围。我相信你的意思是 values() 在第一个例子中。
      • @PeterLawrey 我们一直使用枚举。当我们设计工作流时,审批流程可能不会在 Enum 的 Natural Order 中移动,这就是为什么 List&lt;Enum&gt;EnumSet 相比更方便。
      • EnumSet 没有get() 方法(容易随机访问),而List 有。这对于 List/EnumSet 的用途可能很重要
      【解决方案5】:

      试试这个:

      ... = new ArrayList<Something>(EnumSet.allOf(Something.class));
      

      因为ArrayList 有一个带有Collection&lt;? extends E&gt; 的构造函数。但是只有当你真的想使用EnumSet时才使用这种方法。

      所有枚举都可以访问方法values()。它返回一个包含所有枚举值的数组:

      ... = Arrays.asList(Something.values());
      

      【讨论】:

        【解决方案6】:

        试试

        enum E {
            E1, E2, E3
        }
        
        public static void main(String[] args) throws Exception {
            List<E> list = Arrays.asList(E.values());
            System.out.println(list);
        }
        

        【讨论】:

        • 值得澄清的是,正如问题中所述,您没有从中获得 java.util.ArrayList
        【解决方案7】:
        List<Something> result = new ArrayList<Something>(all);
        

        EnumSet 是一个 Java 集合,因为它实现了 Set 接口:

        public interface Set<E> extends Collection<E> 
        

        因此,您可以对集合执行任何操作,您可以使用 EnumSet 执行任何操作。

        【讨论】:

          【解决方案8】:

          ArrayList 有一个构造函数

          ArrayList(Collection<? extends E> c) 
          

          现在,EnumSet 扩展了 AbstractCollection,所以你可以这样做

          ArrayList<Something> all = new ArrayList<Something>(enumSet)
          

          【讨论】:

            【解决方案9】:

            这更具可读性:

            Object[] allValues = all.getDeclaringClass().getEnumConstants();
            

            【讨论】:

            • 那你可以简单地做Something.class.getEnumConstants()对吗?
            • ... 或 Something.values();
            猜你喜欢
            • 2011-04-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-12-04
            • 2021-05-31
            • 1970-01-01
            相关资源
            最近更新 更多