Новые функции Java8 — необязательно

Java

предисловие

В процессе разработки нам часто нужно аннулировать ссылку, чтобы предотвратить исключения нулевого указателя. Java8 представил класс Optional для изящной обработки таких проблем, как допустимость значений NULL. Также существует множество библиотек классов, которые используют Optional для инкапсуляции возвращаемых значений, например Spring Data JPA. Далее, давайте взглянем на обычное использование необязательных

исходное заявление

Эта статья была опубликована на сайте Nuggets [Happyjava]. Адрес Happy’s Nuggets:Талант /user/398428…, личный блог Хэппи :(blog.happyjava.cn)[blog.happyjava.cn]. Перепечатки приветствуются, но это заявление должно быть сохранено.

Необязательный список методов

Список опциональных методов выглядит следующим образом:

инициализация

Существует три способа инициализировать необязательный элемент:

// 创建一个空的optional
Optional<Object> empty = Optional.empty();
// 此方式不可为null
Optional<String> optional = Optional.of("Happyjava");
// 此方式可以为null
Optional<Object> optional1 = Optional.ofNullable(null);

Здесь следует отметить, что когда Optional.of инициализирует необязательный элемент, вы не можете передать нулевое значение, иначе будет сообщено об исключении нулевого указателя.

Дополнительное основное использование

Многие люди используют это только для необязательного:

Определите, есть ли значение с помощью метода isPresent, а затем получите значение с помощью метода get. Хотя нет ничего плохого в том, чтобы написать это так, это всегда суть Необязательного.

ifPresent

сделать что-то, если он существует

Приведенный выше способ написания мы можем полностью заменить на ifPresent:

orElse

Возвращает, если он существует. Если нет, предоставляется значение по умолчанию. Мы можем установить значение по умолчанию через входной параметр метода orElse

@Test
public void testOrElse() {
    Optional<Object> optional = Optional.empty();
    Object happyjava = optional.orElse("Happyjava");
    System.out.println(happyjava);
}

orElseGet

Возвращает, если он существует. Если он не существует, функция создаст значение

@Test
public void orElseGetTest() {
    Optional<Object> optional = Optional.empty();
    Object name = optional.orElseGet(this::getName);
    System.out.println(name);
}

public String getName() {
    return "Happyjava";
}

orElseThrow (обычно используется)

Возвращает, если он существует. Если он не существует, генерируется исключение.

В ходе развития бизнеса ссылка часто считается пустой, и если она пуста, бизнес-логика обрабатывается в виде потока исключений. Общие коды следующие:

@Test
public void testTest() {
    User user = userRepo.findById(1);
    if(user ==null){
        throw new WebException("用户不存在");
    }
    // 继续业务逻辑
}

Если вы используете Optional, вы можете написать это так:

@Test
public void testElseThrow() {
    Optional<Object> optional = Optional.empty();
    Object o = optional.orElseThrow(() -> {
        throw new RuntimeException("xxx不存在");
    });
}

Этот код, который не может быть скомпилирован в JDK8, подскажет, что проверенное исключение не обрабатывается. Поискал, похоже, это ошибка JDK. Моя демонстрация использует JDK11.

map

Метод map используется для возврата нового option или, можно сказать, для сборки нового option.

Такие как:

Optional<String> name = Optional.of("Happyjava");
Optional<String> upperName = name.map((value) -> value.toUpperCase());
System.out.println(upperName.orElse("No value found"));

flatMap

flatMap также возвращает необязательный. Отличие от карты в том, что карта автоматически инкапсулирует результат в необязательный элемент, а плоская карта требует, чтобы вы инкапсулировали его самостоятельно.

Optional<String> name = Optional.of("Happyjava");
Optional<String> opt = name.flatMap(e -> Optional.of(e.toLowerCase()));
System.out.println(opt.orElse("No value found"));

filter

Возвращает необязательный элемент, содержащий значение, если значение есть и выполняется условие предиката, в противном случае возвращает пустой необязательный элемент.

Optional<String> optional = Optional.of("Happyjava");
Optional<String> opt = optional.filter(s -> {
    return s.length() > 9;
});
System.out.println(opt.orElse("empty"));

Этот код выведет пустой

Суммировать

Необязательный - это функция, представленная в Java 8. Мы можем не инкапсулировать возвращаемое значение нашего метода в необязательный, но все же необходимо изучить необязательный. Например, среда Spring Data JPA теперь инкапсулирует возвращаемый результат в форме необязательного.

Обратите внимание на публичный аккаунт, чтобы получить информацию

Ищите в официальном аккаунте [Happyjava], отвечайте на [электронные книги] и [видео], вы можете получить большое количество качественных электронных книг и видеоматериалов, таких как большие данные, kafka, nginx, MySQL и т. д.

关注Happyjava公众号