lambda-为什么要boxed

3 篇文章 0 订阅

正确的

IntStream.range(0, 10).mapToObj(i->new Product()).collect(Collectors.toList());

报错的

 IntStream.range(0, 10).collect(Collectors.toList());

正确的

 IntStream.range(0,10).boxed().collect(Collectors.toList());

上面三段代码, 相当奇怪
1. 如果单单看bc代码段, 我们可以认为, 因为它的变量是「散」的状态, 所以我们需要聚集起来
2. 可是看a,b段代码, 上说的说法就被打破了

究竟boxed是有什么用呢?

如果再从其他方向来想
也就是boxed对应的类, 我们可以想到包装, 也就想到包装类.

包装类 =>Wrapper class
自动装箱 Autoboxing
自动拆箱 unboxing

奇怪的英文= =|||| Wrapping 和boxing有区别吗…

如果从装箱的角度来讲, 那么上述的三段代码就讲通了

Returns a Stream consisting of the elements of this stream, each boxed to an Integer.

<U> Stream<U>
mapToObj(IntFunction<? extends U> mapper)
Returns an object-valued Stream consisting of the results of applying the given function to the elements of this stream

= =…这锅要 autoboxing他们背!!
参考:
http://stackoverflow.com/questions/27647407/why-do-we-use-autoboxing-and-unboxing-in-java


扩展阅读:

IntStream和Stream< integer >的区别..

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值