избегать использования! = null при вызове length - PullRequest
1 голос
/ 17 июня 2020

У меня есть система, в которой пользователь может вводить имена животных

У меня есть форма:

enter your first animal name: ________________
enter your second animal name: ________________
enter your tird animal name: ________________

я проверяю длину, чтобы убедиться, что размер строки <25 </p>

но в форме, если пользователь не вводит имя, я получу null, так как у меня есть 3 переменных:

  • animalname1
  • animalname2
  • animalname3

если пользователь не вводит имя, поле имеет значение NULL и выдает исключение, допускающее значение NULL

if (animalname1.length() >= 25) {
// my error
}

Я бы хотел избежать этого и сохранить простой код:

if (animalname1 != null && animalname1.length() >= 25) {
// my error
}

Я изучаю Необязательно, но не могу заставить его работать.

Я пытаюсь:

Optional<Object> q = Optional
    .ofNullable(x)
    .map((o) -> {
        if (o.length() >= 25) {
            return false;
        }
        else {
            return true;
        }
});

но это не работает

это есть способ сделать что-то вроде:

boolean hasError1 = Optional
    .isNotNull((o) -> {
        if (o.length() >= 25) {
            return false;
        }
        else {
            return true;
        }
    ).else(false);

??

Ответы [ 2 ]

6 голосов
/ 17 июня 2020

if (animalname1 != null && animalname1.length() >= 25) выглядит чище и проще, если честно.

Вы также можете создать вспомогательный метод:

private static boolean invalidAnimal(String animalName) {
  return animalName != null && animalName.length() >= 25;
}

Тогда ваши условия станут чище:

if (invalidAnimal(animalName1)) //error

А если вы хотите протестировать их все сразу, то можете написать:

if (Stream.of(animal1, animal2, animal3).anyMatch(MyClass::invalidAnimal)) //error
3 голосов
/ 17 июня 2020
final boolean hasAnyLonger = Stream.of(name1, name2, name3)
    .filter(Objects::nonNull)
    .map(String::length)
    .anyMatch(len -> len >= 25);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...