Как конвертировать список отдельных элементов в java 8 необязательно

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

Уродливый код:

List<Integer> integers = new ArrayList<>();

Optional<Integer> optional = integers.size() == 0 ?
        Optional.empty() :
        Optional.of(integers.get(0));

Ответы

Ответ 1

Вы можете использовать метод Stream#findFirst(), который:

Возвращает опцию, описывающую первый элемент этого потока, или пустой Необязательный, если поток пуст.

List<Integer> list = ...
Optional<Integer> optional = list.stream().findFirst();

В качестве альтернативы, с таким же успехом вы также можете использовать метод Stream#findAny().

Ответ 2

Попробуйте это с помощью findFirst:

List<Integer> integers = new ArrayList<Integer>();
Optional<Integer> result =
    integers.stream()
          .map(this::resolve)
          .flatMap(o -> o.isPresent() ? Stream.of(o.get()) : Stream.empty())
          .findFirst();