经由过程 java.util.Arrays.asList()将 Array 转换成 List
Arrays 类有一个轻易的要领asList,能够协助转换使命,下面是语法:
public static <T> List<T> asList(T... a)
注重:参数不一定必需是数组,可变参数也能够。它能够建立一个lis
public class Test { public static void main(String[] args) { List<String> myList = Arrays.asList("Apple"); } }
以上代码将穿件一个包括一个元素"Apple"的鸠合。我们也能够如许做:
public class Test { public static void main(String[] args) { List<String> myList = Arrays.asList("Apple", "Orange"); } }
这将生成一个包括两个元素"Apple","Orange"的鸠合
由于这是一个可变参数。我们能够通报一个数组,数组元素被认定为参数,例子:
public class Test { public static void main(String[] args) { String[] myArray = { "Apple", "Banana", "Orange" }; List<String> myList = Arrays.asList(myArray); for (String str : myList) { System.out.println(str); } } }
如许,一个String鸠合被建立出来了。数组myArray被增加进去了。myList 鸠合有三个元素,一下是输出:
Apple Banana Orange
圈套
这个要领有一些问题,通报进去的数组必需是一个对象数组,而不能是一个基础范例数组。比方:
public class Test { public static void main(String[] args) { int[] myArray = { 1, 2, 3 }; List myList = Arrays.asList(myArray); System.out.println(myList.size()); } }
代码输出是1。为何呢?由于asList要领希冀一个对象的可变参数,然则通报进去的参数是一个基础范例数组,它建立了一个数组鸠合。所以该鸠合的为唯一元素是myArray。因而 myList.get(0)
将返回与myArray一样的对象。
asList()建立的对象是牢固大小的
asList()要领返回的list对象是牢固大小的,不能包容更多的元素,比方:
public class Test { public static void main(String[] args) { String[] myArray = { "Apple", "Banana", "Orange" }; List<String> myList = Arrays.asList(myArray); myList.add("Guava"); } }
输出以下:
Exception in thread "main" java.lang.UnsupportedOperationException at java.util.AbstractList.add(AbstractList.java:148) at java.util.AbstractList.add(AbstractList.java:108) at Test.main(Test.java:8)
由于myList是牢固长度的,不能增加更多元素。
由于该要领返回的List对象不是java.util包下面的ArrayList,而是Arrays内部的ArrayList范例。改类没有完成add,revmove,clear要领,所以任何对改鸠合构造修正的挪用都将失利。
将基础数组范例转换成List
正如上面提到的。通报一个基础范例数组到asList要领不见效,一个不引入第三方库的解决办法是经由过程Java8 的流,例子以下:
public class Test { public static void main(String[] args) { int[] intArray = { 5, 10, 21 }; List myList = Arrays.stream(intArray).boxed() .collect(Collectors.toList()); } }
数组的每一个元素都被从int转换成了Integer范例(装箱),数组就被转成了List范例。
将数组转换成许可增加元素的List
正如上面圈套部份提到的,Arrays.asList()要领不支持增加或许移除元素。假如你不想如许,下面是可选计划:
public class Test { public static void main(String[] args) { String[] myArray = { "Apple", "Banana", "Orange" }; List<String> myList = new ArrayList<String>(Arrays.asList(myArray)); myList.add("Guava"); } }
这段代码显式地建立了一个新的ArrayList对象,然后将Arrays.asList的效果增加进去了。由于我们建立了一个ArrayList。所以没有增加移除限定,上面的代码实行完毕前有四个元素。不要希望代码实行时抛出非常。
本身完成Array组转换成List
有时候解决问题,运用我们本身的完成计划是更好的。下面是一个将java数组转换成List的简朴例子:
public class Test { public static void main(String[] args) { String[] myArray = { "Apple", "Banana", "Orange" }; List<String> myList = new ArrayList<String>(); for (String str : myArray) { myList.add(str); } System.out.println(myList.size()); } }
代码的预期输出是3.由于逻辑实行完鸠合了有3个元素。
我们代码的负面是代码更长了,而且我们在反复造轮子。优点就是当我们的需求转变时,我们能够适应自定义。比方:下面的代码,每一个元素都被增加到list中两次
public class Test { public static void main(String[] args) { String[] myArray = { "Apple", "Banana", "Orange" }; List<String> myList = new ArrayList<String>(); for (String str : myArray) { myList.add(str); myList.add(str); } System.out.println(myList.size()); } }
输出是6,由于数组中的元素都被增加两次。下面是别的一个将String数组转换成List<Integer> 的例子:
public class Test { public static void main(String[] args) { String[] myArray = { "5", "6", "7" }; List<Integer> myList = new ArrayList<Integer>(); for (String str : myArray) { myList.add(Integer.valueOf(str)); } }}
剖析数组中的每一个String并将其转换为响应的Integer。效果列表将包括一切转换后的整数。
引荐进修:java视频教程
以上就是Java如何将数组转换成List?(代码示例)的细致内容,更多请关注ki4网别的相干文章!