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

可选的延迟计算

端木高卓
2023-03-14

是否有可能拥有一个java。util。可选,仅在需要时才进行评估?

我需要将一个可选传递给一个方法(我无法更改的API),并且这个方法可能会也可能不会使用该可选的值。由于该值是由一个繁重的操作计算的,因此我想仅在需要时(如果需要)计算该值,例如调用get()orseGet()ifPresent()等。

类似Optional.ofLazy(供应商


共有1个答案

卢嘉誉
2023-03-14

您需要的是一个供应商,它返回一个可选的<代码>供应商制造惰性零件。

概念代码:

Foo heavyComputation() { ... }

void main() {
    Supplier<Optional<Foo>> sup = () -> heavyComputation();
    doSomethingWhichMayNeedHeavyResult(sup);
}

void doSomethingWhichMayNeedHeavyResult(Supplier<Optional<Foo>> sup) {
    if (electricityIsTooCheap) {
       Foo foo = sup.get().get().orElse(null); // This will lazy load.
    }
}

为简洁起见,我也希望能将两者结合在一起,但我想这会在稍后出现。

 类似资料:
  • 问题内容: 我需要在循环中对数据库进行SQL查询: 更好的方法是:保持原样或循环后移动: 或者是其他东西 ? 问题答案: 整个要点是直到函数返回才执行,因此将其放置在要关闭的资源打开后的适当位置。但是,由于要在循环内创建资源,因此根本不要使用defer- 否则,在函数退出之前,您不会关闭在循环内创建的任何资源,因此它们会堆积直到然后。相反,您应该在每次循环迭代结束时关闭它们, 而无需 :

  • 本文向大家介绍Python类属性的延迟计算,包括了Python类属性的延迟计算的使用技巧和注意事项,需要的朋友参考一下 所谓类属性的延迟计算就是将类的属性定义成一个property,只在访问的时候才会计算,而且一旦被访问后,结果将会被缓存起来,不用每次都计算。 优点 构造一个延迟计算属性的主要目的是为了提升性能 实现 说明 定义了一个延迟计算的装饰器类LazyProperty。Circle是用于测

  • 我面临的问题是一对一的惰性加载在Hibernate中不起作用。我已经解决了,但还是不明白会发生什么。 我的代码(懒惰加载在这里不起作用,当我拉person-address也被提取): 但是:如果我在OneToOne关系中添加,那么惰性加载工作很好! 问题/恳求:请给我解释一下注释如何帮助实现延迟加载。 附注。我看过post1和post2,明白了为什么简单的OneToOne不能偷懒,但我还是不能掌握

  • 问题内容: 假设我有一个任务要从java.util.concurrent.BlockingQueue中提取元素并进行处理。 如果可以动态更改频率,我该如何安排/重新安排任务? 想法是获取数据更新流并将其批量传播到GUI 用户应该能够更改更新频率 问题答案: 我认为您无法更改固定速率的延迟。我认为您需要使用schedule()执行一次操作,并在完成后再次计划(如果需要,可以更改超时)。

  • 问题内容: 我遇到了 一个 问题,即 一对一的延迟加载 在hibernate状态下不起作用。我 已经解决了它 ,但仍然 无法 正确 理解 会发生什么。 我的代码( 延迟加载在这里不起作用 ,当我拉人时-地址也被获取): 但是 :如果我添加 OneToOne关系,则延迟加载 效果很好 ! 问题/完整性: 请向我解释注释如何帮助实现延迟加载。 PS 我已经阅读了post1和post2的帖子,并了解了为

  • 问题 你想将一个只读属性定义成一个property,并且只在访问的时候才会计算结果。 但是一旦被访问后,你希望结果值被缓存起来,不用每次都去计算。 解决方案 定义一个延迟属性的一种高效方法是通过使用一个描述器类,如下所示: class lazyproperty: def __init__(self, func): self.func = func def __ge