OptionalInt 是否可重用?
Is the OptionalInt reusable?
查看 OptionalInt
的 Java8 文档,似乎无法通过设置新值或清空现有值来重用 OptionalInt
。此外,JavaDoc 仅显示了两种通过调用静态方法初始化 OptionalInt 的方法 - 看起来像一个不可变对象。
真的不能重复使用吗?
想象一个批处理,其中要处理的数据由一个 int 原语组成,它可以是可选的。对于每一行(假设为数百万行),必须创建一个新的 OptionalInt
对象。目标是避免不必要的对象实例化和额外的垃圾收集。所以我宁愿自己重新实现它并避免 Java8 实用程序 class OptionalInt
?
OptionalInt
is immutable。这意味着,一旦创建了对象,就无法修改其状态。
一个OptionalInt
要么是通过调用静态工厂empty()
or of(value)
. Then, there are several methods to get the optional value (getAsInt()
), use a default value if no value is present (orElse(other)
)等创建的,但是你会发现没有更新当前值或清空它的方法。
在您的批处理示例中,不变性实际上是您想要拥有的东西,因为it really helps building concurrent applications。当您处理数百万行时,您希望通过使用多线程来加快该过程。在多线程环境中处理可变对象很难正确处理。
您不必太担心创建的新对象。通常,它们是短暂的,并且 JVM handles that kind of objects very well. Actually, take a look at this question: 不可变对象更适合垃圾收集器。
Optional当然不是一个很好的批量处理的中间容器。只代表最终结果就可以了。如果您想批量处理原始值,请考虑使用 IntStreal.reduce
或其朋友。
查看 OptionalInt
的 Java8 文档,似乎无法通过设置新值或清空现有值来重用 OptionalInt
。此外,JavaDoc 仅显示了两种通过调用静态方法初始化 OptionalInt 的方法 - 看起来像一个不可变对象。
真的不能重复使用吗?
想象一个批处理,其中要处理的数据由一个 int 原语组成,它可以是可选的。对于每一行(假设为数百万行),必须创建一个新的 OptionalInt
对象。目标是避免不必要的对象实例化和额外的垃圾收集。所以我宁愿自己重新实现它并避免 Java8 实用程序 class OptionalInt
?
OptionalInt
is immutable。这意味着,一旦创建了对象,就无法修改其状态。
一个OptionalInt
要么是通过调用静态工厂empty()
or of(value)
. Then, there are several methods to get the optional value (getAsInt()
), use a default value if no value is present (orElse(other)
)等创建的,但是你会发现没有更新当前值或清空它的方法。
在您的批处理示例中,不变性实际上是您想要拥有的东西,因为it really helps building concurrent applications。当您处理数百万行时,您希望通过使用多线程来加快该过程。在多线程环境中处理可变对象很难正确处理。
您不必太担心创建的新对象。通常,它们是短暂的,并且 JVM handles that kind of objects very well. Actually, take a look at this question: 不可变对象更适合垃圾收集器。
Optional当然不是一个很好的批量处理的中间容器。只代表最终结果就可以了。如果您想批量处理原始值,请考虑使用 IntStreal.reduce
或其朋友。