在 Android Java 世界中,是否有一种直接的(最好是一次调用)方法将
int
数组转换为 ArrayList<Integer>
并返回?在 ArrayList 上调用 toArray()
返回一个 Integer
数组 - 不完全是我想要的。
我可以轻松地用循环手动完成此操作(事实上已经这样做了)。我想知道库/语言是否支持相同的。
编辑:谢谢大家,我已经编写了自己的拳击手和拆箱手。我只是很惊讶语言/RTL 设计者自己没有想到这一点,特别是原始类型在设计上不符合集合条件。
装箱和拆箱(无需特殊库):
// 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();
请注意,这需要 Java 8(流文档)。
对于任何不知道
::
含义的人,它用于制作 方法参考。
使用Guava(Ints.asList(int ...)和Ints.toArray(Collection
int[] intArray = ...
List<Integer> intArrayAsList = Ints.asList(intArray);
int[] intArray2 = Ints.toArray(intArrayAsList);
请注意,与
Arrays.asList
一样,Ints.asList
返回一个列表,该列表是给定数组的 view。您无法添加或删除其中的内容,但您可以 set
特定索引处的值。如果需要,您也可以将其复制到新的ArrayList
:
List<Integer> arrayList = Lists.newArrayList(Ints.asList(intArray));
Guava 对于所有原始类型都具有相同的方法。
如果您创建一个实用方法,则只需一次调用即可转换。也许在您的情况下,这比添加整个库(您可能只使用其中一个函数)更好,尽管这对您的应用程序来说应该是太大的负担。
这是 h3xStream 答案的源代码(很高兴它使用 Apache 许可证);)
我设法在 Java 8 中找到了解决方案:
import java.util.Arrays;
...
double[] columnsValue = {...};
Double[] values = Arrays.stream(columnsValue).boxed().toArray(Double[]::new);
我无法解释
Double[]::new
到底是什么意思,因为我之前并不知道 Java 8 的这个特性(事实上,IntelliJ IDEA 是为我写的),但看起来它正在做 new Double(double)
数组的每个元素。
请注意:我仅在桌面上测试了此功能,我不知道它是否适用于Android。