目录

  • 1.List 转换为数组
  • 1.1.使用 List 的 toArray() 方法
  • 1.2.使用 Stream API
  • 2.数组转换为 List
  • 2.1.使用 Arrays.asList() 方法
  • 2.2.ArrayList 构造方法
  • 2.3.使用 Collections.addAll() 方法
  • 2.4.使用 Stream API
  • 3.List 转换为 Map
  • 3.1.使用 for 循环遍历 List
  • 3.2.使用 Stream API
  • 4.Map 转换为 List
  • 4.1.使用 for 循环遍历 Map
  • 4.2.使用 Stream API


1.List 转换为数组

1.1.使用 List 的 toArray() 方法

(1)List 提供了一个 toArray() 方法,可以将 List 转换为数组。该方法返回一个包含 List 中所有元素的数组。示例如下:

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

String[] array = list.toArray(new String[0]);

其中,toArray() 方法接受一个参数,表示将要创建的数组类型。该参数可以是任何类型的数组。如果传递的数组的大小不足以容纳 List 中的所有元素,则将创建一个新的数组。

(2)如果 List 中的元素是数组类型,并且要将其转换为二维数组,则在转换时需指定二维数组的第一维的长度。示例如下:

List<int[]> list = new ArrayList<>();

//将 list 转换为二维数组
int[][] array = list.toArray(new int[list.size()][]);

1.2.使用 Stream API

Java 8 引入了 Stream API,可以将 List 转换为数组。示例如下:

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

String[] array = list.stream().toArray(String[]::new);

其中,stream() 方法返回一个 Stream 对象,可以对 List 进行各种操作。toArray() 方法接受一个参数,表示将要创建的数组类型。在这个例子中,我们使用了方法引用 String[]::new 来创建一个新的 String 类型的数组。

注意:在使用 Stream API 将 List 转换为数组时,List 中的元素类型必须与数组元素类型相同,否则会抛出 ClassCastException 异常。

2.数组转换为 List

2.1.使用 Arrays.asList() 方法

Arrays 类提供了一个 asList() 方法,可以将数组转换为 List。该方法返回一个包含数组中所有元素的 List。示例如下:

String[] array = {"apple", "banana", "orange"};

List<String> list = Arrays.asList(array);

需要注意的是,使用 asList() 方法转换得到的 List 是一个固定大小的List,不能进行添加或删除元素等修改操作。其原因在于 Arrays.asList() 返回值是 java.util.Arrays 类中一个私有静态内部类 java.utiil.Arrays.Arraylist,不是我们平时用的 java.util.ArrayList,所以适用于只转换后作为读取的目标,不能用于增删操作。

2.2.ArrayList 构造方法

如果需要进行修改操作,可以通过创建一个新的 List 对象,将转换后的 List 中的元素添加到新的 List 中来实现。示例如下:

String[] array = {"apple", "banana", "orange"};

List<String> list = new ArrayList<>(Arrays.asList(array));

2.3.使用 Collections.addAll() 方法

Collections 类提供了一个 addAll() 方法,可以将数组中的元素添加到 List 中。示例如下:

String[] array = {"apple", "banana", "orange"};

List<String> list = new ArrayList<>();
Collections.addAll(list, array);

需要注意的是,使用 addAll() 方法时,List 必须先被创建,否则会抛出 NullPointerException 异常。

2.4.使用 Stream API

(1)Java 8 引入了 Stream API,支持将 int[]、long[]、double[] 等转换为 List。示例如下:

int[] intArray = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};

List<Integer> list = Arrays.stream(intArray).boxed().collect(Collectors.toList());

(2)同样的包装类型也可以使用这种方式:

Integer[] integerArray = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};

List<Integer> list = Arrays.stream(integerArray).collect(Collectors.toList());

注意:
① 包装类型与基础类型相比少了装箱 (boxed) 这一过程。
② 暂不支持 short[ ]、byte[ ]、char[] 等类型的转换。

3.List 转换为 Map

3.1.使用 for 循环遍历 List

(1)可以使用 for 循环遍历 List,然后将 List 中的元素转换为 Map 中的 key 和 value。示例如下:

List<Person> persons = new ArrayList<>();
persons.add(new Person("Alice", 18));
persons.add(new Person("Bob", 21));
persons.add(new Person("Charlie", 25));

Map<String, Integer> map = new HashMap<>();
for (Person person : persons) {
    map.put(person.getName(), person.getAge());
}

在这个例子中,我们遍历 List 中的每个元素,将 Person 对象的 name 属性作为 Map 中的 key,age 属性作为 Map 中的 value。

(2)更多有关 Map 的遍历方式,可以参考Java 基础——HashMap 遍历方式这篇文章。

3.2.使用 Stream API

可以使用 Java 8 中的 Stream API 将 List 转换为 Map。示例如下:

List<Person> persons = new ArrayList<>();
persons.add(new Person("Alice", 18));
persons.add(new Person("Bob", 21));
persons.add(new Person("Charlie", 25));

Map<String, Integer> map = persons.stream().collect(Collectors.toMap(Person::getName, Person::getAge));

在这个例子中,我们使用了 Stream API 中的 collect() 方法,将List中的元素转换为Map。toMap() 方法接受两个参数,第一个参数表示 Map 中的 key,第二个参数表示 Map 中的 value。Person::getName 和 Person::getAge 是方法引用,分别表示获取 Person 对象的 name 和 age 属性值作为 Map 中的 key 和 value。

注意:在将 List 转换为 Map 时,List 中的元素必须有唯一的 key 值,否则会抛出 IllegalStateException 异常。

4.Map 转换为 List

4.1.使用 for 循环遍历 Map

可以使用 for 循环遍历 Map 中的每个 entry 对象,然后将 entry 对象转换为 List 中的元素。示例如下:

Map<String, Integer> map = new HashMap<>();
map.put("Alice", 18);
map.put("Bob", 21);
map.put("Charlie", 25);

List<Person> persons = new ArrayList<>();
for (Map.Entry<String, Integer> entry : map.entrySet()) {
    persons.add(new Person(entry.getKey(), entry.getValue()));
}

在这个例子中,我们遍历 Map 中的每个 entry 对象,将 entry 对象的 key 作为 Person 对象的 name 属性,value 作为 age 属性,然后将 Person 对象添加到 List 中。

4.2.使用 Stream API

可以使用 Java 8 中的 Stream API 将 Map 转换为 List。示例如下:

Map<String, Integer> map = new HashMap<>();
map.put("Alice", 18);
map.put("Bob", 21);
map.put("Charlie", 25);

List<Person> persons = map.entrySet().stream().map(e -> new Person(e.getKey(), e.getValue())).collect(Collectors.toList());

在这个例子中,我们使用了 Stream API 中的 map() 方法,将 Map 中的每个 entry 对象转换为 Person 对象,然后使用 collect() 方法将 Person 对象转换为 List。

注意:在将 Map 转换为 List 时,Map 中的 key 和 value 值必须与 Person 对象的属性对应,否则转换后的 List 中的元素将会是空的。