当前位置: 首页 > 知识库问答 >
问题:

三个可能的java8可选值-我如何干净地返回存在的任何值?[复制]

海宁
2023-03-14

我有三个java8 Optionals,并希望以首选顺序返回实际存在的任何一个。似乎应该有一种简单的方法可以像这样链接它们:

return optionalA.orElseIfPresent(optionalB).orElseIfPresent(optionalC);

如果这三个都为空,那么应该返回一个Optional.empty()

现有的orElse和orElseGet不能真正胜任这项任务-它们必须返回一个实际值,因此剩余的回退不可能是Optionals本身。

在最坏的情况下,我可能会有一长串ifPresent()检查,但似乎有更好的方法来处理它?

共有2个答案

韩经武
2023-03-14

我喜欢JB Nizet的答案(投票结果也是一样)。或者,仅使用可选(无论出于何种原因):

Optional.ofNullable(
    optionalA.orElse(
        optionalB.orElse(
            optionalC.orElse(null))
        )
    );

这属于缩进/括号疯狂,我个人不喜欢。

赵河
2023-03-14
return Stream.of(optional1, optional2, optional3)
             .filter(Optional::isPresent)
             .map(Optional::get)
             .findFirst();
 类似资料:
  • 问题内容: 如何通过使用和避免返回值? 例: 问题答案: 要返回可选值的值,或者返回默认值(如果可选值没有值),则可以使用。 请注意,我重写了查找最长名称的代码:您可以直接与比较器比较每个String的长度。可以通过调用键提取器作为方法引用来获得一个这样的比较器。

  • 我正在尝试这样做: 实际上,我想要的是返回一个可选的。of(foundVal)如果找到,否则为可选。空()。我不认为这是可选的。of(null)等于该值。我想用什么语法? 也就是说,如何获取映射以返回正确的可选映射?

  • 问题内容: 我正在尝试从WCF服务返回一些JSON。该服务仅从我的数据库返回一些内容。我可以得到数据。但是,我担心JSON的格式。当前,返回的JSON格式如下: 实际上,我希望JSON的格式尽可能整洁。我相信(我可能是不正确的),以干净的JSON表示的相同结果集应如下所示: 我不知道“ d”来自哪里。我也不知道为什么要插入转义字符。我的实体如下所示: 负责返回内容的服务定义为: 如何从WCF服务返

  • 我将这个方法设置为从Spring Boot rest控制器返回一个响应: 这是DAO方法: 我成功地拥有一个json对象作为响应,但格式如下: 当我期待有: 为什么将结果集插入到< code>#result-set-1键中?我如何改变这种行为?

  • 我有下表: 对于两组中的每一组,我想返回所有可能的值组合。对于组1,例如,可能的组合是(A, B)、(A, C)、(A, D)、(B, C)、(B, D)、(C, D)、(A, B, C)、(B, D, C)、(C, A, B)。类似地,对于组2,它是(A, B)、(A, C)、(B, C)[备注:我不想考虑(1)只有一个值的组合,(2)所有值的组合和(3)没有值的组合。因此,对于n个不同的值,我

  • 可选的用于表示可为空的对象,该类的一些用途包括 作为方法返回类型,作为返回null以 表示没有可用值的替代方法 区分“未知”(例如,不存在于映射中)和“已知无值”(存在于映射中,具有值 optional.缺席()) 将可为null的引用包装起来存储在不支持null的集合中(不过有几种其他方法应该首先考虑) 对于第一种情况,我是否需要在所有可为空的返回方法中返回可选的?