OptionalInt是否可重用?

时间:2015-10-11 11:11:33

标签: java java-8 optional

查看OptionalInt的Java8文档,似乎无法通过设置新值或清空现有值来重用OptionalInt。此外,JavaDoc只显示了两种通过调用静态方法初始化OptionalInt的方法 - 看起来像一个不可变对象。

它真的不可重复使用吗?

想象一下批处理,其中要处理的数据包含一个int原语,它可以是可选的。对于每一行(让它成为数百万行),必须创建一个新的OptionalInt对象。目标是避免不必要的对象实例化和额外的垃圾收集。所以我宁愿自己重新实现它并避免使用Java8实用程序类OptionalInt

2 个答案:

答案 0 :(得分:3)

OptionalIntimmutable。这意味着,一旦创建了对象,就无法修改其状态。

通过调用静态工厂empty()of(value)来创建OptionalInt。然后,有几种方法可以获取可选值(getAsInt()),如果没有值(orElse(other)),则使用默认值等,但是您将找不到更新当前值的方法或者清空它。

在您的批处理示例中,不变性实际上是您想要拥有的内容,因为it really helps building concurrent applications。当您处理数百万行时,您希望通过使用多线程来加快该过程。在多线程环境中处理可变对象非常难以做正确。

您不应过分担心创建的新对象。通常情况下,它们是短暂的JVM handles that kind of objects very well。实际上,看看this question:不可变对象更适合垃圾收集器。

答案 1 :(得分:1)

可选当然不是批量处理的良好中间容器。只能代表最终结果。如果您想批量处理原始值,请考虑使用IntStreal.reduce或其朋友。