ifl*_*oop 20 java wrapper primitive-types java-8 java-stream
在玩Java8的Streams-API时,我偶然发现了以下内容:
要将原始包装器classe对象的数组转换为Stream我只需要调用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
Run Code Online (Sandbox Code Playgroud)
我的问题:
这是为什么?这是否与例如行为Arrays.asList()也适用于包装类数组相关?
Hon*_*dek 25
爪哇8流框架有一个通用Stream<T>的对象作为元素,以及三个原始流IntStream,LongStream,DoubleStream对三个主要的原语.如果你使用原语,在你的情况下使用后者中的一个IntStream.
看图:

背后的是:
Java泛型不能使用基本类型的工作:有可能只有List<Integer>和Stream<Integer>,但不和List<int>Stream<int>
当Java集合引入框架,据介绍只有上课,所以如果你想拥有List的intS,你必须给他们换到Integer秒.这很贵!
当Java Streams框架被引入时,他们决定绕过这个开销并与"面向类的"流(使用泛型机制)并行,他们引入了三个额外的所有库函数集,专门为最重要的基本类型:int,long,double.
这里也看到一个奇妙的解释:https://stackoverflow.com/a/22919112/2886891