【Java】集合List转换为数组【toArray() /stream()流】实现

文章目录

  • 一、集合对象的非静态方法toArray()
    • 1、toArray()重载方法1
    • 2、toArray()重载方法2
  • 二、使用stream()流
    • 1、返回Object数组
    • 2、指定数组类型

在Java中,集合(List 接口的实现类)提供了一个名为 toArray 的方法,用于将集合中的元素转换成数组。该方法有两个主要的重载形式,分别用于不同的情况。

一、集合对象的非静态方法toArray()

1、toArray()重载方法1

<T> T[] toArray(T[] a)

这个方法将集合中的元素复制到一个指定类型的数组中,并返回该数组。如果指定的数组大小足够容纳集合中的所有元素,那么会将元素直接复制到指定数组中。如果指定的数组大小不足以容纳所有元素,会创建一个新的数组,并将元素复制到新数组中。

示例:

List<String> stringList = new ArrayList<>();
stringList.add("apple");
stringList.add("banana");
stringList.add("orange");

String[] stringArray = stringList.toArray(new String[0]);

2、toArray()重载方法2

Object[] toArray()

这个重载方法不接受参数,它将集合中的元素复制到一个新创建的 Object 类型数组中,并返回该数组。

List<Integer> intList = new ArrayList<>();
intList.add(1);
intList.add(2);
intList.add(3);

Object[] intArray = intList.toArray();

需要注意的是,toArray 方法返回的是一个对象数组,而不是原始的基本数据类型数组。如果需要将集合中的基本数据类型元素转换成数组,可以使用 Java 8 中引入的 stream() 方法和 toArray() 方法的结合。

二、使用stream()流

示例:

List<Integer> intList = new ArrayList<>();
intList.add(1);
intList.add(2);
intList.add(3);

int[] primitiveIntArray = intList.stream()
                                .mapToInt(Integer::intValue)
                                .toArray();

stream()流与 toArray结合的方式

好处,使用stream()转换为数组过程中可以过滤数据

1、返回Object数组

toArray()默认返回Object数组

  ArrayList<Integer> list2 = new ArrayList<>();
  Collections.addAll(list2, 1, 2, 3, 4);
  // 3、收集数据放进数组
  System.out.println("3、收集数据放进数组===============");
  Object[] arr1 = list2.stream().toArray();
  

2、指定数组类型

toArray()中可以接收一个接口作为参数
接口中可以创建指定类型和大小的数组

下面是匿名内部类和lambda表达式两种方式的实现

接口中非抽象方法apply的形参value为流中数据的个数

  // 4、指定放进数组数据类型
  System.out.println("4、指定放进数组数据类型===============");
  // Infunction的泛型:具体类型的数组
  // apply中形参:流中数据的个数,要跟数组长度一致
  // apply的返回值:具体类型的数组
  Integer[] arr2 = list2.stream().toArray(new IntFunction<Integer[]>() {
      @Override
      public Integer[] apply(int value) {
          //System.out.println("value"+value);
          return new Integer[value];
      }
  });
  // toArray方法中的参数:只是创建一个指定类型的数组
  // toArray底层: 会此意得到流中的每一个数据,并把数据放到数组中
  // toArray的返回值:是一个装着流里面所有数据的数组
 
  // lambda表达式写法,表达式中value表示数组长度也就是流中数据的个数
  Integer[] arr3 = list2.stream().toArray(value -> new Integer[value]);

总之,toArray 方法是将集合中元素转换成数组的一种便捷方式,有助于在集合和数组之间进行数据转换。

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
xiaoxingxing的头像xiaoxingxing管理团队
上一篇 2023年12月19日
下一篇 2023年12月19日

相关推荐