#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());