【问题标题】:Get Array of Enum values less specified item获取枚举值数组少指定项
【发布时间】:2018-05-02 11:54:01
【问题描述】:

我有一个枚举如下:

private enum Actions {
    f, 
    c,  
    r, 
    a 
}

我可以像这样获取数组中的所有枚举值:

Actions[] all = Actions.values();

我希望能够获得小于指定值的值数组,例如不包括 f。我认为这样的事情应该可以满足我的需要,但我无法正确使用:

Actions[] noF = Arrays.stream( Actions.values() )
        .filter( value -> value != Actions.f )
        .toArray();

如果可能的话,我想要一个像我正在尝试的方法一样的单行解决方案。有人可以帮忙吗?

【问题讨论】:

  • 您需要使用toArray(Actions[]::new) 来获取正确的数组类型。

标签: java arrays enums


【解决方案1】:

你需要这样的东西

Actions[] noF = Arrays.stream( Actions.values() )
        .filter( value -> value != Actions.f )
        .toArray(Actions[]::new);

【讨论】:

    【解决方案2】:

    您可以使用EnumSet 来完成这项工作:

    Set<Actions> exceptF = EnumSet.complementOf(EnumSet.of(Actions.f));
    
    // Object array
    Object[] exceptFObjectArray = exceptF.toArray();
    
    // or Actions array
    Actions[] exceptFActionsArray = exceptF.toArray(new Actions[0]);
    

    或者一口气:

    Actions[] exceptF = EnumSet.complementOf(EnumSet.of(Actions.f))
            .toArray(new Actions[0]);
    

    我认为这比像你这样使用流更具可读性。

    【讨论】:

    • 这也很棒,马克。它的关闭应该是正确的答案。抱歉,我和 Debmalya 一起去了
    • @SteveW 没问题,我只是想提供一个替代方案:仅仅因为您可以使用流做事,并不意味着您需要(或应该)使用它们;)
    猜你喜欢
    • 2019-04-19
    • 1970-01-01
    • 2010-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-03
    • 1970-01-01
    相关资源
    最近更新 更多