Получить все константы Enum - PullRequest
0 голосов
/ 11 июня 2018

Как получить все значения перечислений одновременно? Ожидаемые значения: ["Male", "Female"] Вывод GenderEnum.values ​​() : ["MALE", "FEMALE"]

    public enum SPGenderEnum {
        MALE("Male"),
        FEMALE("Female");

        private SPGenderEnum(final String type) {
            this.type = type;
        }

        private final String type;

        public String getType() {return type;}

        @Override
        public String toString() {
            return type;
        }
    }

Ответы [ 4 ]

0 голосов
/ 11 июня 2018

Ну, если вам нужна строка type только для целей представления, вы можете также перезаписать метод toString перечисления, чтобы вернуть заглавную версию значения.

public enum SPGenderEnum {

    MALE, FEMALE;

   @Override
   public String toString() {
        // call toString of supertype
        String name =  super.toString();
        // capitalize the uppercase enum value
        return name.substring(0,1) + name.substring(1).toLowerCase();
    }
}

или определить значения перечисления по-другомув первую очередь:

public enum SPGenderEnum {

    Male, Female;

}
0 голосов
/ 11 июня 2018

Похоже, вы хотите, чтобы ваши перечисления в виде списка строк?По-видимому, это то, что вы ожидаете от вызова конструктора.Однако, если вы хотите, я бы использовал что-то вроде этого:

Arrays.stream(YourEnum.values())  // prefer Arrays#stream to Stream#of due to 
                                  // lazy loading and primitive type handling
    .map(YourEnum::toString)      // prefer method reference to lambda
    .collect(Collectors.toList()) // prefer lists to arrays
0 голосов
/ 11 июня 2018

Это то, что вы хотите, он также должен работать с вызовом toString() в вашем случае

    SPGenderEnum[]  values = SPGenderEnum.values();

    //to print eg.
    for (SPGenderEnum spgItem : values) {
        System.out.println(spgItem.getType());
    }

    //to store in String array
    String[] strVals = new String[values.length];
    for (int i = 0; i < strVals.length; i++) {
        strVals[i]= values[i].getType();
    }
0 голосов
/ 11 июня 2018

Если вы используете Java 8, API потоков, вероятно, является самым простым способом получить нужные значения:

Stream.of(GenderEnum.values())       // create stream of enum constants
      .map(e -> e.getType())         // for each constant, retrieve getType()
      .collect(Collectors.toList())  // collect results into a list

Выражение e -> e.getType() называется лямбда-выражением , и это краткий способ объявления очень простой функции.Оператор map применяет эту функцию к каждому элементу в потоке, заменяя каждый элемент возвращаемым значением функции.В этом случае лямбда возвращает результат вызова e.getType(), где e считается значением GenderEnum.

Простые лямбды, подобные этой, можно переписать в более сжатой форме, называемой a ссылка на метод , как в ответе @ ifly6.

Вместо этого вы можете собрать результаты в String[], заменив collect(Collectors.toList()) на toArray(String[]::new).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...