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

链接选项

年光明
2023-03-14

我有以下类和一个名为ResultUtils的Utils类。

Utils方法之一计算分包商的最近一个营业年度。此方法必须返回可选的Double,因为可能是在本年度新添加了一个分包商。所以它没有过去两年的统计数据。如果一个分包商是在一年前添加的,那么它有上一个营业年度的统计数据,但没有倒数第二个营业年度的统计数据。

我的问题是正确链接getLatestResult方法。在我的示例中,ifPresentOrElse当然是错误的,因为它不能返回任何值。

我该怎么做?

public class Subcontractor
{
    BusinessYear lastBusinessYear;
    BusinessYear penultimateBusinessYear;
    ...
}


public class ResultUtils
{
    public static Optional< Double > getLatestResult( Subcontractor )
    {
        // how to do it right here?
        getResult( Subcontractor.getLastBusinessYear()  )
            .ifPresentOrElse( r -> return r,
                             () -> return getResult( Subcontractor.getPenultimateBusinessYear() ) );
    }

    public static Optional< Double > getResult( BusinessYear businessYear )
    {
        if( businessYear == null ) return Optional.empty();

        // make some calculations
        return Optional.of( calculcatedResult );
    }
}

共有2个答案

宗政学
2023-03-14

让我们修复代码:

public static Optional<Double> getLatestResult(Subcontractor sub) {
    return getResult(sub.getLastBusinessYear()).or(() -> getResult(sub.getPenultimateBusinessYear()));
}

您有两个函数,它们都返回一个可选。您只需要第一个有值。Optional.or如果供应商没有值,它将调用供应商,否则它会返回自己。

如果你用8Java,那么...

public static Optional<Double> getLatestResult(Subcontractor sub) {
    Optional<Double> result = getResult(sub.getLastBusinessYear());
    if (result.isPresent())
        return result;
    return getResult(sub.getPenultimateBusinessYear());
}

获取第一个结果,检查它是否存在,如果存在,则返回它
如果不是,则返回第二个结果。

羊舌青青
2023-03-14
public static Optional<Double> getLatestResult(Subcontractor subcontractor) {
    return getResult(subcontractor.getLastBusinessYear())
            .or(() -> getResult(subcontractor.getPenultimateBusinessYear()));
}

假设您运行的是Java 9。

ifpresentorese打开可选项,但仍需要返回一个选项。

  1. 尝试getResult(subcontractor.getLastBusinessYork())
  2. 如果它存在,就归还它。
  3. 如果它不存在,则返回另一个getResult(subcontractor.getPenultimateBusinessYork())

Java 8解决方案将是

public static Optional<Double> getLatestResult(Subcontractor subcontractor) {
    Optional<Double> result = getResult(subcontractor.getLastBusinessYear());
    return result.isPresent() ? result : getResult(subcontractor.getPenultimateBusinessYear());
}
 类似资料:
  • 在可选的“nil”上查询,调用属性,下标和方法的过程被定义为可选链接。 可选链接返回两个值 - 如果可选项包含'value',则调用其相关属性,方法和下标返回值 如果可选项包含'nil'值,则其所有相关属性,方法和下标返回nil 由于对方法,属性和下标的多个查询被组合在一起,因此对一个链的失败将影响整个链并导致'nil'值。 可选链接作为强制解包的替代方法 在带有'?'的可选值后指定可选链接 在可

  • 寻找链接选项的方法,以便返回出现的第一个选项。如果不存在。 假设我有几个这样的方法: 我想把他们锁起来: 但这当然不起作用,因为需要一个值,而需要一个。

  • 问题内容: 我最近在Swift中进行了大量编程。今天,当出现问题时,我在JavaScipt中做了一些工作: 是否有类似于JavaScript中的可选链接的内容?一种防止没有任何变量的方法? 例: 将失败一半的时间,因为有时返回未定义。 我能想到的唯一解决方案是一个函数: 我希望能够执行以下操作: 仅在返回对象后才执行问号后的部分。 但这不是很精巧。有更好的东西吗?运营商的神奇组合? 编辑 我知道我

  • 我在一个Android Live壁纸应用程序中有如下偏好。(这些是复选框)。我想添加一个链接到一个Facebook页面到这个列表。在网上查看Android PreferenceCategory,我没有看到任何类似“LinkPreference”或“ButtonPreference”的东西,但话说回来,链接或按钮并不是真正的首选,所以也许我想把一个方形的钉子放在一个圆孔里。这可能吗?如果可能,如何可

  • 伪类选择器,就是基于元素当前所处的状态来选取元素。由于状态通常是动态变化的,当元素处于一个特定状态时,它可能得到一个伪类的样式;当状态改变时,它又会失去这个样式。由此可知,它是基于文档之外的抽象,所以称作伪类。 伪类选择器是CSS 中已经定义好的选择器,不能由用户随便起名,只能按CSS规定的标准格式进行使用。其语法为: 选择器:伪类名 { 属性: 值 } 链接伪类选择器 在CSS中,最常用的伪类选

  • 请求yo帮助分页链接。在我的数据库中,我有3条记录,我想每页显示一条记录。当我选择分页链接的下一个数字时,数据没有被提取。事情是当我单击分页链接的第2个数字时,echo var_dump()显示Result是空的,并且我没有获得echo$data->电子邮件的任何值。但是当我搜索时第一次能够显示单个记录,问题只是分页的下一个链接,那么可能会有什么错误呢?我不能得到一个答案,我不确定发生了什么,所以