Как конвертировать список отдельных элементов в 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();