Arrays.asList()使用时的注意事项,这个结论同可适用于Stream.of()
Arrays.asList的参数不能是基本数据类型的数组
Array.asList()的作用是把数组变成一个列表,但是它不能使用 八种基本类型的数组参数,也就是说如 int[], byte[], char[],short[], boolean[],long[],float[],double[] 这几种类型的数组是不可以作为参数的,虽然不会报错,但得到的不是我们想要的数据
如果一定要用这几种类型的数组, 那就声明数组是要使用其相对应的包装类 Integer[] Byte[] 等
Arrays.asList返回的集合不能操作, 只能读取(也就是说返回的集合是不可以使用 add() 和 remove() 等改变集合的方法的)
因为 Arrays.asList() 把回的数把类型是一个list , 但是这个list 不是 java.util.arraylist的类, 而是Arrays类的一个内部类, 这个内部类中没有这些方法, 所以不可以使用
其它只要参数类型使用了泛型的 都不可以使用基本类型
Arrays.stream和Stream.of
在 java8 中,您可以使用 Arrays.Stream 或 Stream.of 将 Array 转换为 Stream。
- 对象数组 对于对象数组,Arrays.stream 和 Stream.of 都返回相同的输出。
private static void ObjectArrays() {String[] array = {“a”, “b”, “c”, “d”, “e”};**//Arrays.stream**Stream stream = Arrays.stream(array);stream.forEach(x-> System.out.println(x));**//Stream.of**Stream stream1 = Stream.of(array);stream1.forEach(x-> System.out.println(x));
}
- 基本数组 对于基本数组,Arrays.stream 和 Stream.of 将返回不同的输出。
private static void PrimitiveArrays() {int[] intArray = {1, 2, 3, 4, 5};// **1. Arrays.stream** -> IntStreamIntStream stream = Arrays.stream(intArray);stream.forEach(x->System.out.println(x));System.out.println("======");// **2. Stream.of** -> Stream<int[]>Stream<int[]> temp = Stream.of(intArray);// 不能直接输出,需要先转换为 IntStreamIntStream intStream = temp.flatMapToInt(x -> Arrays.stream(x));intStream.forEach(x-> System.out.println(x));
}
对于对象数组,两者都调用相同的 Arrays.stream 方法 对于基本数组,我更喜欢 Arrays.stream,因为它返回固定的大小
IntStream,更容易操作。 所以,推荐使用
Arrays.stream,不需要考虑是对象数组还是基本数组,直接返回对应的流对象,操作方便。