Новый enum с массивом - PullRequest
0 голосов
/ 03 января 2019

Мне нужно сохранить значения перечисления (в данном случае MERIA и SMI) из списка строк, созданных split().

Вот что у меня есть:

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 голосов
/ 03 января 2019

проблемы

Есть несколько проблем с вашим кодом:

  1. Access должно быть access
    в Java принято вводить строчные буквыбуква в начале переменной и буква в верхнем регистре в начале имени класса, поэтому классы и переменные легко различимы

, но в основном

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;
}

Streams

Самые элегантные решения на мой взгляд, но, возможно, немного сложнее.

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

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

Надеюсь, это было полезно!Greetz

0 голосов
/ 03 января 2019

Создайте новый массив, используя длину 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...