У меня есть следующий метод, и здесь я сначала получаю имя ExportProductType, а затем получаю значение этого имени. Если name или valueOf(name) имеет значение null, выдается исключение.
Код: Выделить всё
public static ProductType getExportProductType(ExportProductType exportProductType) {
return Optional.ofNullable(exportProductType)
.map(ExportProductType::name)
.map(ProductType::valueOf)
.orElseThrow(() -> new ProductTypeNotFoundException());
}
Все в порядке и работает без проблем. Однако, когда я передаю значение перечисления ExportProductType, которое недоступно в перечислениях ProductType, я не могу его перехватить, и оно выдает другое исключение «Нет константы перечисления...». Итак, я думаю, мне нужно проверить, имеет ли ProductType::valueOf значение null перед .map(ProductType::valueOf). Как мне это проверить? Использование логического значения или фильтра? Или другой способ, подходящий для потока() в Java?
Я думаю, что-то подобное после .map(ExportProductType::name):
Код: Выделить всё
.filter(result -> ProductType::valueOf(result) != null)
Обновление: Я нашел правильный способ, как показано ниже:
< р>
Код: Выделить всё
EnumUtils.isValidEnum(ProductType.class, exportProductType.name());
Мне просто нужно использовать его в потоке(). Итак, можно ли сделать такую же проверку в потоке()? Это нормально, чуть ниже строки .map(ExportProductType::name)?
Код: Выделить всё
.filter(x -> EnumUtils.isValidEnum(ProductType.class, x))
Подробнее здесь:
https://stackoverflow.com/questions/688 ... g-pipeline