it-swarm.com.ru

Как преобразовать необязательный <T> в поток <T>?

Я хочу добавить поток с необязательным. Поскольку Stream.concat может объединять только потоки, у меня есть этот вопрос:

Как мне преобразовать Необязательный <T> в Поток <T>?

Пример:

Optional<String> optional = Optional.of("Hello");
Stream<String> texts = optional.stream(); // not working
46
slartidan

В Java-9 добавлен отсутствующий метод stream(), поэтому этот код работает:

Stream<String> texts = optional.stream();

См. JDK-8050820 . Скачать Java-9 здесь .

56
Tagir Valeev

В Java 8 вы можете сделать это:

Stream<String> texts = optional.map(Stream::of).orElseGet(Stream::empty);
106
slartidan

Ты можешь сделать:

Stream<String> texts = optional.isPresent() ? Stream.of(optional.get()) : Stream.empty();
6
Konstantin Yovkov

Я могу порекомендовать метод GuavaStreams.stream(optional), если вы не на Java 9. Простой пример:

Streams.stream(Optional.of("Hello"))

Также возможен статический импорт Streams.stream, поэтому вы можете просто написать

stream(Optional.of("Hello"))
4
Utku Özdemir

Если вы используете более старую версию Java (смотрите на вас, Android) и используете aNNiMON Lightweight Stream API , вы можете сделать что-то вроде следующего:

    final List<String> flintstones = new ArrayList<String>(){{
        add("Fred");
        add("Wilma");
        add("Pebbles");
    }};

    final List<String> another = Optional.ofNullable(flintstones)
            .map(Stream::of)
            .orElseGet(Stream::empty)
            .toList();

Этот пример просто делает копию списка.

1
JohnnyLambada

Хорошая библиотека от одного из моих бывших коллег - Streamify. Много коллекционеров, создающих потоки из практически всего.

https://github.com/sourcy/streamify

Создание потока формы необязательно в streamify:

Streamify.stream(optional)
0
Gábor Lipták