我如何在Java中转换列表<整数>到int[] ?
我很困惑,因为List.toArray()实际上返回一个对象[],它既不能转换为Integer[]也不能转换为int[]。
现在我正在使用一个循环来这样做:
int[] toIntArray(List<Integer> list) {
int[] ret = new int[list.size()];
for(int i = 0; i < ret.length; i++)
ret[i] = list.get(i);
return ret;
}
有更好的办法吗?
这和上面的问题类似
如何在Java中将int[]转换为Integer[] ?
使用Eclipse Collections,如果您有一个类型为java.util.List<Integer>的列表,您可以执行以下操作:
List<Integer> integers = Lists.mutable.with(1, 2, 3, 4, 5);
int[] ints = LazyIterate.adapt(integers).collectInt(i -> i).toArray();
Assert.assertArrayEquals(new int[]{1, 2, 3, 4, 5}, ints);
如果您已经有一个Eclipse集合类型,如MutableList,您可以执行以下操作:
MutableList<Integer> integers = Lists.mutable.with(1, 2, 3, 4, 5);
int[] ints = integers.asLazy().collectInt(i -> i).toArray();
Assert.assertArrayEquals(new int[]{1, 2, 3, 4, 5}, ints);
注意:我是Eclipse Collections的提交者
如果您只是将一个Integer映射到int,那么您应该考虑使用并行性,因为您的映射逻辑不依赖于其作用域之外的任何变量。
int[] arr = list.parallelStream().mapToInt(Integer::intValue).toArray();
要注意这一点
请注意,并行并不会自动地比串行执行操作快,尽管如果您有足够的数据和处理器核心,它可能会快。虽然聚合操作使您能够更容易地实现并行性,但您仍有责任确定应用程序是否适合并行性。
有两种方法将integer映射到它们的原始形式:
通过ToIntFunction。
mapToInt(整数::intValue)
通过lambda表达式显式开箱。
mapToInt(i -> i. intvalue ())
通过隐式(自动)解盒lambda表达式。
mapToInt(i -> i)
给定一个空值的列表
List<Integer> list = Arrays.asList(1, 2, null, 4, 5);
这里有三个处理null的选项:
在映射之前过滤掉空值。
int[] arr = list.parallelStream().filter(对象::nonNull).mapToInt(Integer::intValue).toArray();
将空值映射为默认值。
int[] arr = list.parallelStream()。映射(i -> i == null ?-1:i).mapToInt(Integer::intValue).toArray();
在lambda表达式中处理null。
int[] arr = list.parallelStream()。mapToInt(i -> i == null ?-1: i.t intvalue ()).toArray();