目录
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 中的元素将会是空的。