带有数组的新枚举

时间:2019-01-03 02:13:59

标签: java enums

我需要从MERIA创建的字符串列表中保存枚举值(在这种情况下为SMIsplit()

这是我所拥有的:

public AccessLevel[] getAccess() {
    String Access = "MERIA : SMI";
    String[] split = Access.split(" : ");
    for (String Acces : split) {
        list.add(AccessLevel.valueOf(Acces));
    }
    return new AccessLevel[]{AccessLevel.MERIA,AccessLevel.NONE};
}

我想要这样的东西,将列表中的枚举参数保存到数组中:

 public AccessLevel[] getAccess() {
    String Access = "MERIA : SMI";
    String[] split = Access.split(" : ");
    for (String Acces : split) {
        list.add(AccessLevel.valueOf(Acces));
    } 
    return new AccessLevel[]{list};

}

2 个答案:

答案 0 :(得分:3)

问题

您的代码有很多问题:

  1. Access应该是access
    在Java中,惯例是在变量的开头键入小写字母,在类名的开头键入大写字母,这样可以容易地区分类的变量。

但主要

  1. list不存在,因此您应该创建一个变量。

解决方案

数组

public AccessLevel[] getAccess() {
    String accessesString = "MERIA : SMI";
    String[] split = accessesString.split(" : ");

    AccessLevel[] list = new AccessLevel[split.length];

    for (int i = 0; i < split.length; i++) {
        list[i] = AccessLevel.valueOf(split[i]);
    }
    return list;
}

列表

您应该真正使用List而不是基本数组,它们更加通用并且更易于使用。

public List<AccessLevel> getAccess() {
    String accessesString = "MERIA : SMI";
    String[] split = accessesString.split(" : ");

    List<AccessLevel> list = new ArrayList<>();

    for (String access : split) {
        list.add(AccessLevel.valueOf(access));
    }
    return list;
}

我认为最优雅的解决方案,但可能要困难一些。

public List<AccessLevel> getAccess() {
    String accessesString = "MERIA : SMI";
    String[] split = accessesString.split(" : ");

    return Arrays.stream(split)
            .map(AccessLevel::valueOf)
            .collect(Collectors.toList());
}

我希望这会有所帮助! 格里茨

答案 1 :(得分:2)

使用长度split.length创建一个新数组。

public AccessLevel[] getAccess() {
    String access = "MERIA : SMI";
    String[] split = access.split("\\s*:\\s*");
    AccessLevel[] accessLevels = new AccessLevel[split.length];
    for (int i = 0; i < split.length; i++) {
        accessLevels[i] = AccessLevel.valueOf(split[i]);
    }
    return accessLevels;
}

还要注意,我将" : "更改为"\\s*:\\s*"以适应任意数量的空格。或者,您可以使用String.trim()

并且Java中的非最终变量名称以小写字母开头。


或者您可以使用Stream API:-

public AccessLevel[] getAccess() {
    String access = "MERIA : SMI";
    return Arrays.stream(access.split(":"))
            .map(String::trim)
            .map(AccessLevel::valueOf)
            .toArray(AccessLevel[]::new);
}