如何在 java 中将 Object[] 转换为 int[]
Posted
技术标签:
【中文标题】如何在 java 中将 Object[] 转换为 int[]【英文标题】:How to cast Object[] into int[] in java 【发布时间】:2020-12-15 13:06:14 【问题描述】:在整数优先级队列中使用.toArray()
方法后,我得到一个对象数组,如下所示:
Object[] objects = pq.toArray();
但是,我需要数组为int[]
。我试过了:
int [] arr = (int[]) objects;
但它说:
Cannot cast from Object[] to int[]
我怎样才能做到这一点?
【问题讨论】:
【参考方案1】:所有集合都提供了一个替代的toArray
实现来指定元素类型:
Integer[] objects = pq.toArray(Integer[]::new);
请注意,这需要 Java v11 或更高版本
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Collection.html#toArray(java.util.function.IntFunction)
注意,在这种情况下,结果数组显然是整数 wrapper 对象,不知道这是否符合您的要求。
编辑 - 快速测试:
PriorityQueue<Integer> q = new PriorityQueue<>();
q.add(42);
System.out.println(Arrays.toString(q.toArray(Integer[]::new)));
【讨论】:
PriorityQueue这不是你可以轻易做到的。
您可能知道 Object[] 实际上只是充满整数,这意味着应该可以强制转换它,对吧?
问题是,变量“objects”仍然存在。在 Object[] 中,您可以放置任何对象。所以在你的演员表之后,有人可能会做这样的事情:
objects[0] = "some string";
那么应该怎么办呢?你的 int[] 是否应该突然无效,因为它现在包含一个字符串?是否不允许将除整数以外的内容输入到通常允许的objects
中?
铸造只是意味着您指向同一事物,但以不同的方式看待它。你需要做的就是改造它。对此已经有了答案:
java-map-an-array-of-strings-to-an-array-of-integers
所以,简单的转换在这里没有帮助。
更新:@stridecolossus 的答案可能和我所链接的一样好。
【讨论】:
【参考方案3】:由于PriorityQueue
实现了Collection
,您可以使用stream
迭代其元素并将它们映射到int
:
PriorityQueue<Integer> pq = new PriorityQueue<>(Arrays.asList(1, 2, 5));
int[] arr = pq.stream().mapToInt(Integer::intValue).toArray();
System.out.println(Arrays.toString(arr)); // [1, 2, 5]
【讨论】:
以上是关于如何在 java 中将 Object[] 转换为 int[]的主要内容,如果未能解决你的问题,请参考以下文章
在 Java 中将 List<Object> 转换为 String[]
在Java中将String Object转换为Jackson
如何在 JavaScript 中将 Object 转换为 Array [] 键值对