如何在java中将object[]强制转换为int[]

e4eetjau  于 2021-07-03  发布在  Java
关注(0)|答案(3)|浏览(593)

在我使用这个方法之后 .toArray() 在整数的优先级队列中,我得到如下对象数组:

Object[] objects = pq.toArray();

但是,我需要数组 int[] . 我试过:

int [] arr = (int[]) objects;

但上面说:

Cannot cast from Object[] to int[]

我怎样才能做到这一点?

mwngjboj

mwngjboj1#

PriorityQueue 工具 Collection ,您可以使用 stream 迭代其元素并将它们Map到 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]
z31licg0

z31licg02#

这不是你能轻易做到的。
您可能知道对象[]实际上只包含整数,这意味着应该可以对其进行强制转换,对吧?
问题是,变量“objects”仍然存在。在一个物体[]中,你可以放置任何物体。所以在你的剧组结束后,有人可能会这样做:

objects[0] = "some string";

那么接下来会发生什么呢?int[]现在包含一个字符串,是否应该突然无效?不允许输入整数以外的东西吗 objects 这通常是允许的?
铸造只是意味着你指向同一件事,但看它不同。你需要做的是改变它。对此,已经有了答案:
java将字符串数组Map为整数数组
所以,简单的铸造是没有帮助的。
更新:@stridesconsus答案可能和我链接的一样好。

7y4bm7vi

7y4bm7vi3#

所有集合都提供了一个替代方案 toArray 指定元素类型的实现:

Integer[] objects = pq.toArray(Integer[]::new);

注意这需要JavaV11或更高版本
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/collection.html#toarray(java.util.function.intfunction)
注意,结果数组显然是整数 Package 器对象在这种情况下,不知道这是否适合您的要求。
编辑-快速测试:

PriorityQueue<Integer> q = new PriorityQueue<>();
q.add(42);
System.out.println(Arrays.toString(q.toArray(Integer[]::new)));

相关问题