在Android Java世界中,是否有一种直接(理想情况下是一次调用)方式将int
数组转换为ArrayList<Integer>
并返回?在ArrayList上调用toArray()
会返回一个Integer
数组 - 这不是我想要的。
我可以通过循环手动轻松完成(事实上已经做过)。我想知道图书馆/语言是否支持相同的内容。
编辑:谢谢大家,我已经写了自己的拳击手和unboxer。我很惊讶语言/ RTL设计师自己没有想到它,特别是原始类型的设计不适合收藏。答案 0 :(得分:10)
使用Guava(Ints.asList(int...)和Ints.toArray(Collection<Integer>)):
int[] intArray = ...
List<Integer> intArrayAsList = Ints.asList(intArray);
int[] intArray2 = Ints.toArray(intArrayAsList);
请注意,与Arrays.asList
一样,Ints.asList
会返回一个列表,该列表是给定数组的视图。您无法添加或删除它,但您可以set
特定索引处的值。如果您愿意,也可以将其复制到新的ArrayList
:
List<Integer> arrayList = Lists.newArrayList(Ints.asList(intArray));
Guava对所有原始类型都有相同的方法。
答案 1 :(得分:4)
如果您创建的实用程序方法是一次调用转换。也许在你的情况下,这比添加一个完整的库(你可能只使用一个函数)更好,尽管这对你的应用来说应该是太多的负担。
这是h3xStream答案的source code(很高兴它使用Apache许可证);)
答案 2 :(得分:3)
装箱和拆箱(没有特殊库):
// 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 (Stream Documentation)。
对于不知道::
含义的人,它曾用于制作Method Reference。
答案 3 :(得分:1)
Common.Lang有一个实用程序类:ArrayUtils
答案 4 :(得分:1)
我设法在 Java 8 中找到了解决方案:
import java.util.Arrays;
...
double[] columnsValue = {...};
Double[] values = Arrays.stream(columnsValue).boxed().toArray(Double[]::new);
我无法解释Double[]::new
到底意味着什么,因为我之前并不知道 Java 8 的这个功能(事实上, IntelliJ IDEA < / em>为我写了这个,但看起来它正在对数组的每个元素进行new Double(double)
。
请注意:我仅在桌面上对此进行了测试,我不知道它是否适用于Android。