在使用Java8的Streams-API时,我偶然发现了以下内容:
要将原始包装类对象数组转换为Stream
I,只需调用Stream.of(array)
。但是要转换原始数据类型的数组,我必须.of(array)
从相应的包装器(类)流类(<-听起来很傻)中调用。
一个例子:
final Integer[] integers = {1, 2, 3};
final int[] ints = {1, 2, 3};
Stream.of(integers).forEach(System.out::println); //That works just fine
Stream.of(ints).forEach(System.out::println); //That doesn't
IntStream.of(ints).forEach(System.out::println); //Have to use IntStream instead
我的问题:为什么?这是否与例如Arrays.asList()
仅适用于包装类数组的行为相关?
爪哇8流框架有一个通用Stream<T>
的对象作为元素,以及三个原始流IntStream
,LongStream
,DoubleStream
对三个主要的原语。如果您使用基元,请使用后一种IntStream
。
看图片:
其背后是:
Java泛型不能与原始类型一起使用:可以仅具有List<Integer>
and Stream<Integer>
,而不能具有andList<int>
Stream<int>
当Java集合引入框架,据介绍只有上课,所以如果你想拥有List
的int
S,你必须给他们换到Integer
秒。这很昂贵!
当Java流引入的框架,他们决定来解决这个开销和并行的“面向类的”流(使用泛型机制),他们推出了三个额外的套均化库功能,专为最重要的设计基本类型:int
,long
,double
。
在这里也可以看到一个奇妙的解释:https : //stackoverflow.com/a/22919112/2886891
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句