关于java:Java-数字类型集合转换成基本类型数组-如ListInteger转int

4次阅读

共计 1418 个字符,预计需要花费 4 分钟才能阅读完成。

如何把 List 转成数组?个别状况咱们能够应用汇合类提供的 Collection.toArray() 办法。

List<Integer> integerList = Arrays.asList(1,3,2);
// 办法一,强制转换
Integer[] integerAry = (Integer[]) integerList.toArray();
// 办法二,传入一个指定类型对象
Integer[] integerAry2 = integerList.toArray(new Integer[0]);

那么将 List<Integer> 转成 int[]数组该如何解决呢?沿用以上办法的话:

int[] integerAry = (int[]) integerList.toArray();
// 编译谬误: Inconvertible types; cannot cast 'java.lang.Object[]' to 'int[]'
int[] integerAry2 = integerList.toArray(new int[0]);
// 编译谬误: no instance(s) of type variable(s) T exist so that int[] conforms to T[]

起因是,强制转换的泛型对象须要为援用类型,根本类型无奈进行转换。这条路行不通,那就循环遍历进行手动转换 …

int[] integerAry = new int[integerList.size()];
for (int i = 0; i < integerList.size(); i++){integerAry[i] = integerList.get(i);
}

尽管也能够实现到预期成果,但有点麻烦,有没有简略点的办法呢?JDK1.8 引入了 Stream 流概念能够把 List 转换成 stream 流,调用 mapToInt 办法将 Integer 对象转换成 int 类型,再调用 toArray 办法转换成数组。

int[] integerAry = integerList.stream().mapToInt(Integer::intValue).toArray();

同样能够将其余汇合类型转换成 stream 流实现雷同的成果,比方将下面的 List 换成 Set 汇合,其实现代码是截然不同的。

Set<Integer> integerSet = new HashSet<>(Arrays.asList(1,2,3,2));
int[] integerAry = integerSet.stream().mapToInt(Integer::intValue).toArray();

反过来,把数组转换 List,同样可行。

Arrays.stream(new String[]{"Mai", "Jelly"}).collect(Collectors.toList());
// 对于根本类型数组,须要调用 boxed()办法先进行装箱(转换成援用类型),能力封装成汇合对象
Arrays.stream(new int[]{1, 3, 2}).boxed().collect(Collectors.toList());

stream 流的呈现大大降低了一些罕用转换操作的代码量,其作用远不止此,与之搭配应用的还有 Lambda 表达式,有趣味能够深刻理解一下。

举荐学习文章:
深刻了解 Java 8 Lambda(语言篇——lambda,办法援用,指标类型和默认办法)
深刻了解 Java 8 Lambda(类库篇——Streams API,Collectors 和并行)

正文完
 0