一 发现问题 int 类型的数据没有转成数组,而是输出了对象地址
System.out.println("test");
int[] x = {1, 2, 3, 4, 5, 6, 7};
List listX = Arrays.asList(x);
List listX1 = new ArrayList();
listX1.add(1);
listX1.add(2);
listX1.add(3);
listX1.add(4);
listX1.add(5);
listX.forEach(System.out::print);///为什么没有输出?而是输出一个对象
System.out.println("***********");
listX1.forEach(System.out::print);
System.out.println();
输出:
test
[I@4e50df2e***********
12345
System.out.println("***********方式一:不支持增删");
String[] str = {"qwe", "zxc"};
List listStr = Arrays.asList(str);
listStr.forEach(System.out::println);
// listStr.add("test"); // 出错
// listStr.remove("qwe"); // 出错
// listStr.forEach(System.out::println);
System.out.println("***********方式二:支持增删");
List listStr2 = new ArrayList<>(Arrays.asList(str));
listStr2.forEach(System.out::println);
System.out.println("***********方式二:开始做增删");
listStr2.add("test2");
listStr2.remove("qwe");
listStr2.forEach(System.out::println);
System.out.println("***********方式三:支持增删");
List listStr3 = new ArrayList(str.length);
Collections.addAll(listStr3, str);
listStr3.forEach(System.out::println);
System.out.println("***********方式三:开始做增删");
listStr3.add("test3");
listStr3.remove("qwe");
listStr3.forEach(System.out::println);
System.out.println("***********方式四:支持增删");
int[] ints = {1, 2, 3, 4, 5};
long[] longs = {1, 2, 3, 4, 50000};
double[] doubles = {1, 2, 30000.001, 4, 5};
float[] floats = {1f, 2f, 30000.001f, 4f, 5f};
List<Integer> listInts = Arrays.stream(ints).boxed().collect(Collectors.toList());
List<Long> listLongs = Arrays.stream(longs).boxed().collect(Collectors.toList());
// Arrays.stream(floats).boxed().collect(Collectors.toList()); 不支持
List<Double> listDoubles = Arrays.stream(doubles).boxed().collect(Collectors.toList());
System.out.println("***********方式四:开始增删");
listInts.add(66);
listInts.remove(1);// 和String的差别,String是移除value
listLongs.add(66l);
listLongs.remove(1);
listDoubles.add(66.0);
listDoubles.remove(1);
listInts.forEach(System.out::println);
System.out.println("*************************");
listLongs.forEach(System.out::println);
System.out.println("*************************");
listDoubles.forEach(System.out::println);
// 回到最初的问题 其实是jdk泛型,没法识别这个基本类型的所以被认为是一个对象。
List listIntObject = Arrays.asList(ints);
List listLongObject = Arrays.asList(longs);
List listFloatObject = Arrays.asList(floats);
List listDoubleObject = Arrays.asList(doubles);
listIntObject.forEach(System.out::println);
listLongObject.forEach(System.out::println);
listFloatObject.forEach(System.out::println);
listDoubleObject.forEach(System.out::println);
List<Integer> listIntegers = new ArrayList<>();
listIntegers.add(10);
listIntegers.add(11);
listIntegers.add(12);
listIntegers.add(13);
List<Long> listLongsX = new ArrayList<>();
listLongsX.add(20L);
listLongsX.add(21L);
listLongsX.add(22L);
listLongsX.add(23L);
List<Double> listDoubleX = new ArrayList<>();
listDoubleX.add(30.0);
listDoubleX.add(31.1);
listDoubleX.add(32.2);
listDoubleX.add(33D);
int[] intArr1 = listIntegers.stream().mapToInt(Integer::intValue).toArray();
long[] intLong1 = listLongsX.stream().mapToLong(Long::longValue).toArray();
double[] intDouble1 = listDoubleX.stream().mapToDouble(Double::doubleValue).toArray();
Arrays.stream(intArr1).forEach(System.out::println);
Arrays.stream(intLong1).forEach(System.out::println);
Arrays.stream(intDouble1).forEach(System.out::println);
int[] intArr2 = listIntegers.stream().mapToInt(Integer::valueOf).toArray();
long[] intLong2 = listLongsX.stream().mapToLong(Long::valueOf).toArray();
double[] intDouble2 = listDoubleX.stream().mapToDouble(Double::valueOf).toArray();
Arrays.stream(intArr2).forEach(System.out::println);
Arrays.stream(intLong2).forEach(System.out::println);
Arrays.stream(intDouble2).forEach(System.out::println);
int[] intArr = listInts.stream().mapToInt(Integer::intValue).toArray();
long[] longArr = listLongs.stream().mapToLong(Long::longValue).toArray();
double[] doubleArr = listDoubles.stream().mapToDouble(Double::doubleValue).toArray();
Arrays.stream(intArr).forEach(System.out::println);
Arrays.stream(intArr).forEach(System.out::println);
Arrays.stream(intArr).forEach(System.out::println);
List listInts1 = Arrays.stream(ints).boxed().collect(Collectors.toList());
List listLongs1 = Arrays.stream(longs).boxed().collect(Collectors.toList());
// Arrays.stream(floats).boxed().collect(Collectors.toList()); 不支持
List listDoubles1 = Arrays.stream(doubles).boxed().collect(Collectors.toList());
// 以下的方式都会转化出错(编译出错),因为类型没有指定
// int[] intArr3 = listInts1.stream().mapToInt(Integer::intValue).toArray();
// long[] longArr3 = listLongs1.stream().mapToLong(Long::longValue).toArray();
// double[] doubleArr3 = listDoubles1.stream().mapToDouble(Double::doubleValue).toArray();
//
// int[] intArr4 = listInts1.stream().mapToInt(Integer::valueOf).toArray();
// long[] longArr4 = listLongs1.stream().mapToLong(Long::valueOf).toArray();
// double[] doubleArr4 = listDoubles1.stream().mapToDouble(Double::valueOf).toArray();
输出:
***********方式一:不支持增删
qwe
zxc
***********方式二:支持增删
qwe
zxc
***********方式二:开始做增删
zxc
test2
***********方式三:支持增删
qwe
zxc
***********方式三:开始做增删
zxc
test3
***********方式四:支持增删
***********方式四:开始增删
1
3
4
5
66
*************************
1
3
4
50000
66
*************************
1.0
30000.001
4.0
5.0
66.0
[I@254989ff
[J@37f8bb67
[F@20ad9418
[D@439f5b3d
10
11
12
13
20
21
22
23
30.0
31.1
32.2
33.0
10
11
12
13
20
21
22
23
30.0
31.1
32.2
33.0
1
3
4
5
66
1
3
4
5
66
1
3
4
5
66
如上基本数据类型的相互转化,和四种基本类型转成List的操作。