Получение значений перечисления в виде списка строк

#java #enums

#java #перечисления

Вопрос:

У меня есть следующее перечисление, и я хочу преобразовать его в список его строковых значений:

 @Getter
@AllArgsConstructor
public enum danger{

    Danger("DGR"),
    Normal("NOR");


    /**
     * The value.
     */
    private final String value;
}
  

Желаемый результат: Список «DGR» и «NOR»

Мое текущее решение выглядит следующим образом:

 List<String> dangerlist = Stream.of(DangerousShipment.values())
                .map(Enum::name)
                .collect(Collectors.toList());
  

Проблема в том, что я могу выбрать только имя перечисления, а не фактическое значение.

Комментарии:

1. замените карту на DangerousShipment::getValue

2. Кстати, по соглашению все имена экземпляров enum должны быть заглавными в качестве констант. Так DANGER и NORMAL . И имя класса enum должно содержать начальную букву в верхнем регистре, Danger , а не danger . Наконец, вы могли бы рассмотреть более описательное имя перечисления, такое как DangerLevel .

Ответ №1:

Добавьте средство получения значения:

 public enum DangerShipment {
    // Code from the OP omitted for brevity

    public String getValue() {
        return value;
    }
}
  

И использовать его при построении списка:

 List<String> dangerlist = Stream.of(DangerousShipment.values())
                                .map(DangerousShipment::getValue)
                                .collect(Collectors.toList());
  

Ответ №2:

Вот полный код:

     public enum danger {

        Danger("DGR"), Normal("NOR");

        private danger(String value) {
            this.value = value;
        }

        /**
         * The value.
         */
        private final String value;

        /**
         * @return the value
         */
        public String getValue() {
            return value;
        }
    }

List<String> dangerlist = Stream.of(danger.values())
                                .map(x -> x.getValue())
                                .collect(Collectors.toList());