Optionant有什么意义?

ycggw6v2  于 2021-07-06  发布在  Java
关注(0)|答案(2)|浏览(314)

这个问题在这里已经有答案了

optionant vs optional(3个答案)
intstream比普通流有什么优势(1个答案)
基本流与对象流以及发生的实际装箱(2个答案)
为什么在Java8中有多个可选版本(1个答案)
15小时前关门了。
我知道它的存在是为了避免双重 Package 的性能问题 Optional<Integer> 但是在这个例子中:

OptionalInt x = IntStream.range(1, 1000000)
        .map(y -> y * 2)
        .filter(y -> y > 10)
        .findAny();

中间人是处理许多价值的人,即。 IntStream , IntUnaryOperator 等等 OptionalInt 最后只创建一次。
它真的值得拥有吗 OptionalInt 就为了最后那一个返回对象?

eyh26e7m

eyh26e7m1#

首先,请记住,在 filter 方法用法(或任何返回不同数量对象的方法,如 reduce ). 不能保证值总是存在。这就是返回值可能在那里而不是 null 这可能会导致错误。
仅仅为最后的一个返回对象使用optionant真的值得吗?
是的,值得。 OptionalIntOptional<Integer> 返回一个基元 int 相反(当然值必须存在)。我们可以说 int . 由于装箱只与原语相关,我猜引入这样的对象是为了方便和避免装箱操作开销。

OptionalInt optionalInt = IntStream.range(0, 10)
        .filter(i -> i > 5)
        .map(i -> i + 1)
        .findAny();
int resultInt1 = optionalInt.getAsInt();  // PROS: explicit method name advantage
Optional<Integer> optional =  IntStream.range(0, 10)
        .filter(i -> i > 5)
        .mapToObj(i -> i + 1)             // CONS: boxing (int -> Integer)
        .findAny();
int resultInt2 = optional.get();          // CONS: boxing (Integer -> int)
                                          // CONS: not explicit method name
d7v8vwbk

d7v8vwbk2#

如果找不到,你打算还什么?

int x = IntStream.range(1, 1000000)
        .map(y -> y * 2)
        .filter(y -> y > 10)
        .findAny().orElse(-23);

相关问题