可选的IfPresent和其他替代方案

时间:2016-02-04 07:15:40

标签: java java-8 optional

如何创建一个将代码设置为BYTESSECONDS的代码。我在设置默认BYTES之前使用SECONDS功能调用覆盖了setTypeAsSecondsIfCcTimeIsValid

    } else if (mscc.getRsu().isPresent()) {
        type = Type.BYTES;
        mscc.getRsu().get().getCcTime().ifPresent(this::setTypeAsSecondsIfCcTimeIsValid);
    }

1 个答案:

答案 0 :(得分:3)

这样的事情应该有效:

type = mscc.getRsu().flatMap(rsu -> rsu.getCcTime())
                    .filter(ccTime -> isCcTimeValid(ccTime))
                    .map(ccTime -> Type.BYTES).orElse(Type.SECONDS);

但是我会改用三元:

type = mscc.getRsu().flatMap(rsu -> rsu.getCcTime())
                    .filter(ccTime -> isCcTimeValid(ccTime))
                    .isPresent() ? Type.BYTES : Type.SECONDS;

此代码假定您使用isCcTimeValid方法。