Java Stream中List、Integer[]、int[] 的相互转换

布满荆棘的人生 2024-04-01 16:33 119阅读 0赞

不得不说Java8的新特性Stream流对数据的处理、转换十分友好,代码简洁高效,业务场景中经常会遇到需要将集合、数组进行转换,下面列举几个常见转换形式

1.int[]类型

int[] ==> Integer[]

  1. //int[] => IntStream => Stream<Integer> => Integer[]
  2. Integer[] vinteger = Arrays.stream(vint).boxed().toArray(Integer[]::new);
  • Arrays.stream(vint) 将基本数据类型数组转换成基本数据类型流 int[] => IntStream
  • boxed() 装箱函数,将基本数据类型流转换成对象流 IntStream => Stream
  • toArray(Integer[]::new)方 将对象流转换为对象数组 Stream => Interger[]

int[] ==> List

  1. List<Integer> list = Arrays.stream(vint).boxed().collect(Collectors.toList());
  • collect(Collectors.toList()) 将对象流收集为集合,这里 collect 方法里传入的是一个收集器 (Collector),它通过 Collectors.toList() 产生。

2.Integer[]类型

Integer[] ==> int[]

  1. //Integer[] => Stream<Integer> => IntStream=> int[]
  2. 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

  1. List<Integer> list = Arrays.asList(vinteger);
  • asList方法将数组转换成集合
  • asList 返回的是 Arrays 里的静态私有类 ArrayList,而不是 java.util 里的 ArrayList,它无法自动扩容

无法扩容,就有存在限制了,如果业务场景需要将集合增加元素,即需扩容的情况下,可以重新实例化一个ArrayList,使其可以自动扩容

  1. List<Integer> list = new ArrayList<>(Arrays.asList(vinteger));

3.List类型

List ==> int[]

  1. //List<Integer> => Stream<Integer> => IntStream => int[]
  2. int[] vint = list.stream().mapToInt(Integer::valueOf).toArray();
  • stream方法将集合转换为对象流 List => Stream

List ==> Integer[]

  1. Integer[] vinteger = list.toArray(new Integer[list.size()]);
  • 需要注意,toArray方法中的参数传递一个数组,即需要归定长度,则可以通过list.size()定义。

发表评论

表情:
评论列表 (有 0 条评论,119人围观)

还没有评论,来说两句吧...

相关阅读

    相关 JavaDate与String相互转换

    我们在注册网站的时候,往往需要填写个人信息,如姓名,年龄,出生日期等,在页面上的出生日期的值传递到后台的时候是一个字符串,而我们存入数据库的时候确需要一个日期类型,反过来,在页