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