gpt4 book ai didi

Java 8 可选 : reference self in "orElse" function

转载 作者:行者123 更新时间:2023-12-02 13:00:54 25 4
gpt4 key购买 nike

鉴于此代码:

class PositionValue {
Object value;
boolean deleted;
}

class Position {
Optional<PositionValue> value = Optional.empty();
}

Position getPosition() {
return positionRepository.findSomePosition();
}

Position findCorrectPosition() {
Position position = getPosition();
return position.value.map(this::finalizeOrNext).orElse(position);
}

Position finalizeOrNext(PositionValue positionValue) {
if (positionValue.deleted) {
return moveToNextPosition(positionValue);
} else {
return finalPosition(positionValue);
}
}

有没有办法避免在 findCorrectPosition 中显式声明 position 变量?换句话说,我希望 orElse 函数引用 getPosition() 调用的结果。

最佳答案

您的代码中没有“ self ”关系。 Optional 包含 PositionValue,或者不包含它,因为 orElse 仅在 Optional 时才相关> 为空。

事实上,有一个 Position 实例引用了该 Optional 并没有建立特殊的关系;可能还有很多其他对象也引用了该Optional

简化代码的唯一方法是在知道所需上下文的位置创建一个支持方法,Position:

class Position {
Optional<PositionValue> value = Optional.empty();
public Position mapOrSelf(Function<? super PositionValue, ? extends Position> f) {
return value.map(f).orElse(this);
}
}

然后你可以像这样使用它:

Position findCorrectPosition() {
return getPosition().mapOrSelf(this::finalizeOrNext);
}

关于Java 8 可选 : reference self in "orElse" function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30578896/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com