«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как эффективно преобразовать список объектов в необязательные в потоках Java?

Как эффективно преобразовать список объектов в необязательные в потоках Java?

Опубликовано 7 ноября 2024 г.
Просматривать:937

How to Efficiently Convert List of Objects to Optional in Java Streams?

Как стать кратким с помощью необязательного и Stream Java 8::flatMap

При работе с потоками Java 8 преобразование List в необязательное и эффективное извлечение первого значения Other может оказаться непростой задачей. Хотя для FlatMap обычно требуется обратный поток, отсутствие функцииstream() для необязательного параметра усложняет ситуацию.

Решение Java 16

В Java 16 представлен Stream.mapMulti, позволяющий краткий подход:

Optional result = things.stream()
    .map(this::resolve)
    .mapMulti(Optional::ifPresent)
    .findFirst();

Решение Java 9

В JDK 9 добавлен файлOptional.stream, упрощающий задачу:

Optional result = things.stream()
    .map(this::resolve)
    .flatMap(Optional::stream)
    .findFirst();

Решение для Java 8

В Java 8 можно использовать следующий подход:

Optional result = things.stream()
    .map(this::resolve)
    .flatMap(o -> o.isPresent() ? Stream.of(o.get()) : Stream.empty())
    .findFirst();

Использование вспомогательной функции для преобразования необязательного в поток:

static  Stream streamopt(Optional opt) {
    if (opt.isPresent())
        return Stream.of(opt.get());
    else
        return Stream.empty();
}

Optional result = things.stream()
    .flatMap(t -> streamopt(resolve(t)))
    .findFirst();
Заявление о выпуске Эта статья перепечатана по адресу: 1729667949. В случае каких-либо нарушений, пожалуйста, свяжитесь с [email protected], чтобы удалить ее.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3