Java Stream中List、Integer[]、int[] 的相互转换
不得不说Java8的新特性Stream流对数据的处理、转换十分友好,代码简洁高效,业务场景中经常会遇到需要将集合、数组进行转换,下面列举几个常见转换形式
1.int[]类型
int[] ==> Integer[]
//int[] => IntStream => Stream<Integer> => Integer[]
Integer[] vinteger = Arrays.stream(vint).boxed().toArray(Integer[]::new);
- Arrays.stream(vint) 将基本数据类型数组转换成基本数据类型流 int[] => IntStream
- boxed() 装箱函数,将基本数据类型流转换成对象流 IntStream => Stream
- toArray(Integer[]::new)方 将对象流转换为对象数组 Stream
=> Interger[]
int[] ==> List
List<Integer> list = Arrays.stream(vint).boxed().collect(Collectors.toList());
- collect(Collectors.toList()) 将对象流收集为集合,这里 collect 方法里传入的是一个收集器 (Collector),它通过 Collectors.toList() 产生。
2.Integer[]类型
Integer[] ==> int[]
//Integer[] => Stream<Integer> => IntStream=> int[]
int[] vint = Arrays.stream(vinteger).mapToInt(Integer::valueOf).toArray();
- Arrays.stream(vinteger) 将对象数组转换成对象流 Integer[] => Stream
- mapToInt(Integer::valueOf) 将对象流转换成基本类型流。Stream
=> IntStream - toArray() 将基本类型流转换为基本类型数组。IntStream => int[]
注意点: map函数表示映射每个元素做同样操作,而mapToInt函数是表示将每个元素转换成int。
Integer[] ==> List
List<Integer> list = Arrays.asList(vinteger);
- asList方法将数组转换成集合
- asList 返回的是 Arrays 里的静态私有类 ArrayList,而不是 java.util 里的 ArrayList,它无法自动扩容。
无法扩容,就有存在限制了,如果业务场景需要将集合增加元素,即需扩容的情况下,可以重新实例化一个ArrayList,使其可以自动扩容
List<Integer> list = new ArrayList<>(Arrays.asList(vinteger));
3.List类型
List ==> int[]
//List<Integer> => Stream<Integer> => IntStream => int[]
int[] vint = list.stream().mapToInt(Integer::valueOf).toArray();
- stream方法将集合转换为对象流 List
=> Stream
List ==> Integer[]
Integer[] vinteger = list.toArray(new Integer[list.size()]);
- 需要注意,toArray方法中的参数传递一个数组,即需要归定长度,则可以通过list.size()定义。
还没有评论,来说两句吧...