【问题标题】:How to call a class method using Optional如何使用 Optional 调用类方法
【发布时间】:2018-01-29 15:49:01
【问题描述】:

我正在尝试从 Optional.ispresent(callmethod) 调用私有方法,但出现编译错误。

基本上这是我要检查的条件,如果满足,则调用私有方法。

final OrderLines orderLines = readFromMockFile();

if (null != searchCriteria.getSearch() && StringUtils.isNotEmpty(searchCriteria.getSearch().getValue())) {

     applySearchConfig(searchCriteria.getSearch(), orderLines);

}

为了避免空检查,我使用 Optional 重写了这段代码

Optional.ofNullable(searchCriteria.getSearch())
   .map(x -> StringUtils.isNotEmpty(x.getValue()))
   .ifPresent(applySearchConfig(searchCriteria.getSearch()));

但我收到编译错误Optional 类型中的 ifPresent(Consumer) 方法不适用于参数 (OrderLines)

【问题讨论】:

    标签: java optional


    【解决方案1】:

    ifPresent() 接受 Consumer 作为参数。
    但是您将要调用的方法传递给它(我想它不会返回Consumer):

    .ifPresent(applySearchConfig(searchCriteria.getSearch()));
    

    此外,您在这里使用了map 而不是filter

    .map(x -> StringUtils.isNotEmpty(x.getValue()))
    

    因此,您将检查结果映射到 truefalse
    您也不希望这样,因为无论结果如何(truefalse),这都会使值呈现。

    试试看:

    Optional.ofNullable(searchCriteria.getSearch())
       .filter(x -> StringUtils.isNotEmpty(x.getValue()))
       .ifPresent(x -> applySearchConfig(x, orderLines));
    

    【讨论】:

    • 谢谢,它有效。我没想到要使用过滤器!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多