Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> java

Java 9: новые методы Optional (stream, ifPresentOrElse, or)

Optional (Java 8) помогает избежать null-проверок и NPE. Java 9 добавила три метода.

stream()

public Stream<T> stream()

Если значение есть — возвращает стрим из одного элемента, иначе — пустой стрим. Удобно для flatMap.

Пример

List<Optional<String>> list = Arrays.asList(
    Optional.empty(), Optional.of("A"), Optional.empty(), Optional.of("B"));

// Java 8 style
List<String> filtered = list.stream()
    .flatMap(o -> o.isPresent() ? Stream.of(o.get()) : Stream.empty())
    .collect(Collectors.toList());

// Java 9 style
List<String> filteredJava9 = list.stream()
    .flatMap(Optional::stream)
    .collect(Collectors.toList());
// Оба дают [A, B]

ifPresentOrElse(Consumer, Runnable)

public void ifPresentOrElse(Consumer<? super T> action, Runnable emptyAction)

Если значение есть — выполняет action, иначе — emptyAction.

Пример

Optional<Integer> opt = Optional.of(1);
opt.ifPresentOrElse(
    x -> System.out.println("Value: " + x),
    () -> System.out.println("Not Present.")
); // Value: 1

opt = Optional.empty();
opt.ifPresentOrElse(
    x -> System.out.println("Value: " + x),
    () -> System.out.println("Not Present.")
); // Not Present.

or(Supplier<Optional>)

public Optional<T> or(Supplier<? extends Optional<? extends T>> supplier)

Если значение есть — возвращает этот Optional, иначе — результат supplier.

Пример

Optional<String> opt = Optional.of("Mahesh");
Supplier<Optional<String>> supplier = () -> Optional.of("Not Present");

opt = opt.or(supplier);
opt.ifPresent(x -> System.out.println("Value: " + x)); // Value: Mahesh

opt = Optional.empty().or(supplier);
opt.ifPresent(x -> System.out.println("Value: " + x)); // Value: Not Present

Эти методы делают работу с Optional более функциональной и выразительной.

java

  1. Ключевое слово final в Java: переменные, методы и классы
  2. Оператор instanceof в Java: полное руководство с примерами
  3. Статические вложенные классы в Java: использование, отличия и примеры
  4. Анонимные внутренние классы в Java: определение, синтаксис и практические примеры
  5. Паттерн Singleton в Java: как реализовать и безопасно использовать
  6. Рефлексия в Java: инспекция классов, методов и полей во время выполнения
  7. Освоение Java ObjectOutputStream: сериализация, методы и практические примеры
  8. Освоение Java Generics: создание переиспользуемого, типобезопасного кода
  9. Мастерство файловых операций в Java с java.io: создание, чтение, запись и удаление
  10. Java 9 Stream API Enhancements: takeWhile, dropWhile, iterate, ofNullable