如何将单个元素列表转换为java 8可选

时间:2015-06-16 12:49:58

标签: java collections java-8 optional

如何很好地将包含一个或零个元素的列表转换为Optional?

丑陋的代码:

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

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

2 个答案:

答案 0 :(得分:20)

您可以使用Stream#findFirst()方法,其中:

  

返回描述此流的第一个元素的Optional,如果流为空,则返回空Optional。

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

或者,取得同样的成功,您也可以使用Stream#findAny()方法。

答案 1 :(得分:-1)

使用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();