如何很好地将包含一个或零个元素的列表转换为Optional?
丑陋的代码:
List<Integer> integers = new ArrayList<>();
Optional<Integer> optional = integers.size() == 0 ?
Optional.empty() :
Optional.of(integers.get(0));
答案 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();