Java中List与数组之间的相互转换 |
您所在的位置:网站首页 › object转为string数组 › Java中List与数组之间的相互转换 |
一、List列表与对象数组
List列表中存储对象,如List、List、List,对象数组中同样存储相应的对象,如Integer[]、String[]、Person[],对象数组与对象List的转换可通过如下方式实现: (一)对象List转对象数组 1、toArray()方法直接调用对象List的toArray()方法转换为对象数组,该方法的参数是T[],因此需要传入对应的对象数组构造函数,指定数组的长度,如下所示: 1 2 3 ArrayList integersList = new ArrayList(Arrays.asList(1,2,3)); // 1、toArray()方法 Integer[] integersArrau = integersList.toArray(new Integer[integersList.size()]); // 2、toArray()方法,等价于上面的用法,即0会自动替换为size() Integer[] integersArrau = integersList.toArray(new Integer[0]); 2、Stream流的toArray()方法通过Stream流的toArray()方法,传入参数是对应对象的构造方法的方法引用,使用方式如下所示: 1 2 3 ArrayList integersList = new ArrayList(Arrays.asList(1,2,3)); // 2、Stream流的toArray()方法 Integer[] integersArray2 = integersList.stream().toArray(Integer[]::new); 这个toArray()方法是Stream类下的,该方法说明如下所示: /** * Returns an array containing the elements of this stream, using the * provided {@code generator} function to allocate the returned array, as * well as any additional arrays that might be required for a partitioned * execution or for resizing. * *This is a terminal * operation. * * @apiNote * The generator function takes an integer, which is the size of the * desired array, and produces an array of the desired size. This can be * concisely expressed with an array constructor reference: * {@code * Person[] men = people.stream() * .filter(p -> p.getGender() == MALE) * .toArray(Person[]::new); * } * * @param the element type of the resulting array * @param generator a function which produces a new array of the desired * type and the provided length * @return an array containing the elements in this stream * @throws ArrayStoreException if the runtime type of the array returned * from the array generator is not a supertype of the runtime type of every * element in this stream */ A[] toArray(IntFunction generator); 该方法传入一个函数式接口,该接口对应一个方法引用,作用是创建一个新的指定类型和长度的数组,因此我们传入的参数就是一个Integer[]数组的构造方法的方法引用,最终得到的也就是一个Integer[]数组。 3、for循环过于简单,不再赘述。 (二)、对象数组转对象List 1、使用Arrays.asList()该方法通过传入一个对象数组,最后转换为一个对象List,如下所示: 1 2 3 Integer[] integersArray = {1, 2, 3}; // 1、使用Arrays.asList() List integersList = Arrays.asList(integersArray); asList方法传入的参数是一个可变参数,因此既可以传入多个参数,也可以传入一个数组,如下所示: /** * Returns a fixed-size list backed by the specified array. (Changes to * the returned list "write through" to the array.) This method acts * as bridge between array-based and collection-based APIs, in * combination with {@link Collection#toArray}. The returned list is * serializable and implements {@link RandomAccess}. * *This method also provides a convenient way to create a fixed-size * list initialized to contain several elements: * * List;String; stooges = Arrays.asList("Larry", "Moe", "Curly"); * * * @param the class of the objects in the array * @param a the array by which the list will be backed * @return a list view of the specified array */ @SafeVarargs @SuppressWarnings("varargs") public static List asList(T... a) { return new ArrayList(a); } 2、使用Collections.addAll() 通过Collections集合类的static方法将一个对象数组转换为对象List,注意首先要创建出一个对象List,使用方式如下所示: 1 2 3 4 Integer[] integersArray = {1, 2, 3}; // 2、使用Collections.addAll() ArrayList integersList2 = new ArrayList(); Collections.addAll(integersList2,integersArray); 3、使用Stream中的CollectorJDK8之后可以使用Stream流来执行转换操作,通过Stream流的终结操作collect来指定将要转换得到的List: 1 2 3 Integer[] integersArray = {1, 2, 3}; // 3、使用Stream中的Collector List integersList3 = Arrays.stream(integersArray).collect(Collectors.toList()); 4、for循环过于简单,不再赘述。 二、List列表与基本数据类型数组上面我们介绍了对象List列表与对象数组之间的转换,但是有些情况需要直接将对象List转换为基本数据类型数组,如List转int[]这种情况,下面详细介绍。 (一)、对象List转基本数据类型数组 1、Stream流执行转换通过Stream流执行转换,如List转换为int[],通过Stream流的mapToInt()可将每个Integer转换为int,再输出为int数组,如下所示: 1 2 3 4 5 6 ArrayList integersList = new ArrayList(Arrays.asList(1,2,3)); // 1、Stream流执行转换 // 方法引用 int[] arrays1 = integersList.stream().mapToInt(Integer::intValue).toArray(); //需要先用mapToInt进行转换 // 2、 lambda表达式 int[] arrays2 = integersList.stream().mapToInt(i -> i).toArray(); 2、for循环过于简单,不再赘述。 (二)、基本数据类型数组转对象List 1、Stream流转换以int[]数组来举例,通过Stream流的mapToObj()方法先将int[]数组中每个int值转换为Integer包装类,再通过collect执行终结操作转换为Integer的List。 int[] integersArray = {1, 2, 3}; // 1、Stream流转换, 需要先用mapToObj进行转换 List integersList = Arrays.stream(integersArray).mapToObj(Integer::new).collect(Collectors.toList()); 2、for循环for循环是最简单、好用的方式,不再赘述。 注意,二维数组中的 list.toArray(array) 方法不能用于一维的 int[] 中。 因为 toArray() 方法的参数是范型对象,而 int 是标准数据类型。可以用 Interger[]来实现 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |