lambda-为什么要boxed

正确的

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.

 Stream
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 >的区别..

你可能感兴趣的:(坑,JAVA)