首先需要知道的是Stream中的of有两个重载方法:
public static<T> Stream<T> of(T... values); public static<T> Stream<T> of(T t);在学习Stream的过程中,发现一个比较有趣的点,就是8大常规类型的数组会被第二个,也就是仅传入一个元素的of识别。
情景模拟:
分别用 常规的int值,常规的int数组,Integer,Integer数组来创建流,并查看IDEA自动生成的类型。
测试代码:
@Test public void testOf(){ int x =1; int [] arr1 ={1,2,3}; Integer y =1; Integer [] arr2 ={1,2,3}; // x 会自动装箱 Stream<Integer> stream1 = Stream.of(x); //Stream封装的元素为int[] Stream<int[]> stream2 = Stream.of(arr1); Stream<Integer> stream3 = Stream.of(y); Stream<Integer> stream4 = Stream.of(arr2); }如上表明常规类型的数组会被当做一个 int[] 类型的值,而不被当做是一个数组。
解决方法
int [] arr1 ={1,2,3}; Stream<Integer> stream5 = Arrays.stream(arr1).boxed();更多关于Stream的知识,可以参看这篇博客Java-Stream学习笔记(上)