Java中的(Un)装箱原始数组

Sev*_*yev 7 java collections android boxing

在Android Java世界中,是否有一种直接(理想情况下是一次调用)方式将数组转换int为a ArrayList<Integer>和back?调用toArray()ArrayList返回一个数组Integer- 不是我想要的.

我可以通过循环手动轻松完成(事实上已经做过).我想知道库/语言是否支持相同.

编辑:谢谢大家,我已经写了自己的拳击手和unboxer.我很惊讶语言/ RTL设计师自己没有想到它,特别是原始类型的设计不符合集合.

Col*_*inD 11

使用Guava(Ints.asList(int ...)Ints.toArray(Collection <Integer>)):

int[] intArray = ...
List<Integer> intArrayAsList = Ints.asList(intArray);
int[] intArray2 = Ints.toArray(intArrayAsList);
Run Code Online (Sandbox Code Playgroud)

请注意Arrays.asList,Ints.asList返回一个列表,该列表是给定数组的视图.您无法添加或删除它,但您可以set使用特定索引处的值.ArrayList如果您愿意,也可以将其复制到新的:

List<Integer> arrayList = Lists.newArrayList(Ints.asList(intArray));
Run Code Online (Sandbox Code Playgroud)

Guava对所有原始类型都有相同的方法.

  • 我没有在项目中引入新的依赖项,因为我可以在睡眠中编写三行函数. (4认同)

All*_*son 9

装箱和拆箱(无特殊库):

// Necessary Imports:
import java.util.*;
import java.util.stream.*;

// Integers:
int[] primitives = {1, 2, 3};
Integer[] boxed = Arrays.stream(primitives).boxed().toArray(Integer[]::new);
int[] unboxed = Arrays.stream(boxed).mapToInt(Integer::intValue).toArray();

// Doubles:
double[] primitives = {1.0, 2.0, 3.0};
Double[] boxed = Arrays.stream(primitives).boxed().toArray(Double[]::new);
double[] unboxed = Arrays.stream(boxed).mapToDouble(Double::doubleValue).toArray();
Run Code Online (Sandbox Code Playgroud)

请注意,这需要Java 8流文档)。

对于不知道这::意味着什么的任何人,它用于制作Method Reference