如何在 java 中将 Object[] 转换为 int[]
How to cast Object[] into int[] in java
在整数优先级队列中使用方法 .toArray()
后,我得到一个对象数组,如下所示:
Object[] objects = pq.toArray();
但是,我需要数组为 int[]
。我试过:
int [] arr = (int[]) objects;
但它说:
Cannot cast from Object[] to int[]
我怎样才能做到这一点?
所有集合都提供了另一种 toArray
指定元素类型的实现:
Integer[] objects = pq.toArray(Integer[]::new);
注意这需要 Java v11 或更高版本
请注意,在这种情况下,结果数组显然是整数 wrapper 对象,不知道这是否适合您的要求。
编辑 - 快速测试:
PriorityQueue<Integer> q = new PriorityQueue<>();
q.add(42);
System.out.println(Arrays.toString(q.toArray(Integer[]::new)));
这不是你能轻易做到的。
您可能知道 Object[] 实际上只是全是整数,这意味着应该可以转换它,对吧?
问题是,变量“objects”仍然存在。在 Object[] 中,您可以放置任何 Object。所以在你投完之后,有人可能会做类似的事情:
objects[0] = "some string";
那么接下来会发生什么?你的 int[] 是否应该突然无效,因为它现在包含一个字符串?是否应该不允许将整数以外的东西输入 objects
而通常允许这样做?
铸造只是意味着你指向同一件事,但看待它的方式不同。你需要做的是改造它。已经有答案了:
因此,简单的转换在这里无济于事。
更新:@stridecolossus 的回答可能和我链接到的答案一样好。
因为 PriorityQueue
implements Collection
, you can use a 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]
在整数优先级队列中使用方法 .toArray()
后,我得到一个对象数组,如下所示:
Object[] objects = pq.toArray();
但是,我需要数组为 int[]
。我试过:
int [] arr = (int[]) objects;
但它说:
Cannot cast from Object[] to int[]
我怎样才能做到这一点?
所有集合都提供了另一种 toArray
指定元素类型的实现:
Integer[] objects = pq.toArray(Integer[]::new);
注意这需要 Java v11 或更高版本
请注意,在这种情况下,结果数组显然是整数 wrapper 对象,不知道这是否适合您的要求。
编辑 - 快速测试:
PriorityQueue<Integer> q = new PriorityQueue<>();
q.add(42);
System.out.println(Arrays.toString(q.toArray(Integer[]::new)));
这不是你能轻易做到的。
您可能知道 Object[] 实际上只是全是整数,这意味着应该可以转换它,对吧?
问题是,变量“objects”仍然存在。在 Object[] 中,您可以放置任何 Object。所以在你投完之后,有人可能会做类似的事情:
objects[0] = "some string";
那么接下来会发生什么?你的 int[] 是否应该突然无效,因为它现在包含一个字符串?是否应该不允许将整数以外的东西输入 objects
而通常允许这样做?
铸造只是意味着你指向同一件事,但看待它的方式不同。你需要做的是改造它。已经有答案了:
因此,简单的转换在这里无济于事。
更新:@stridecolossus 的回答可能和我链接到的答案一样好。
因为 PriorityQueue
implements Collection
, you can use a 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]