Как задать условие в Enum'e в Java 8?
Имеется enum:
public enum CommandType {
LOGIN(new SignInCommand()),
LOGOUT(new LogoutCommand());
private Command command;
CommandType(Command command) {
this.command = command;
}
public Command getCommand() {
return this.command;
}
}
И я хочу с помощью стрима проверить, имеется ли данный enum и вернуть Optional.empty() в случае его отсутствия. Делаю это так:
return Arrays.stream(CommandType.values())
.filter(type -> type.name().equalsIgnoreCase(requestCommand))
.findFirst()
.map(CommandType::getCommand);
Вопрос: как в данном способе вернуть Optional.empty, если будет передано значение в переменную requestCommand, отсутствующее в enum'e?
Насколько мне известно, findFirst() возвращает первый элемент из стрима (возвращает Optional).
Пробовал так, но это не верно:
return Arrays.stream(CommandType.values())
.filter(type -> type.name().equalsIgnoreCase(requestCommand))
.findFirst()
.map(CommandType::getCommand)
.orElse(Optional.empty());
Ответы (1 шт):
Автор решения: Roman Konoval
→ Ссылка
findFirst превращает stream в Optional. Так что либо делайте сначала map, а уже потом findFirst:
return Arrays.stream(CommandType.values())
.filter(type -> type.name().equalsIgnoreCase(requestCommand))
.map(CommandType::getCommand)
.findFirst()
;
Либо используйте Optional.flatMap, чтоб преобразовать значение, если оно есть:
return Arrays.stream(CommandType.values())
.filter(type -> type.name().equalsIgnoreCase(requestCommand))
.findFirst()
.flatMap(CommandType::getCommand);