Как вы упомянули, в настоящее время метод возвращает boolean
, что является результатом двух состояний. В то же время вы ищете результат с тремя состояниями:
- команда известна
- команда неизвестна
- существует несколько команд, известных для префикса.
Для вопроса, касающегося способа возврата правильного результата, одним из вариантов будет возвращение набора возможных команд, которые могут представлять требуемые три состояния:
- коллекция состоит из одного элемента
- коллекция пуста
- коллекция состоит из нескольких элементов.
Изменения в исходном коде могут быть как это:
private Collection<String> relatedCommand(String input) {
// make sure the split afterwards has at least size one
if (input.matches(" .*")) {
return Collections.emptyList();
}
final String command = input.split(" ".toString())[0];
return COMMAND_PACKAGE
.keySet()
.stream()
.map(Pattern::toString)
.filter(patternText -> patternText.startsWith(comman))
.collect(Collectors.toList());
}
public Command getCommand(final String input) throws InvalidInputException {
Collection<String> commands = relatedCommand(input)
if (commands.size() == 1) {
Terminal.printError("test");
throw new InvalidInputException("invalid arguments");
} else if (commands.isEmpty()) {
throw new InvalidInputException("unknown command");
} else {
...
}
}