在运行时,[Ljava.lang.Object; 无法转换为类 [Ljava.lang.Integer。

huangapple go评论80阅读模式
英文:

Running into [Ljava.lang.Object; cannot be cast to class [Ljava.lang.Integer at runtime

问题

在运行时,当尝试将List<Integer[]>转换为Integer[]时,我一直遇到上面的错误。

  1. public static Integer[] findKthLargest(List&lt;Integer[]&gt; list, int k) throws IllegalArgumentException {
  2. Integer[] arr = (Integer[]) list.toArray();
  3. insertionSort(arr, new ArrayComparator());
  4. System.out.println(Arrays.toString(arr));
  5. return arr[k];
  6. }

我尝试过将List<Integer[]>强制转换为Object[],然后再转换为Integer[],但我仍然遇到相同的错误。我不能更改方法头部。

我还没有完成方法的其余部分的实现,所以我放置了一个println来查看它是否会为我提供大致预期的结果。

英文:

At runtime, I keep running into the error above when trying to make a List<Integer[]> to an Integer[].

  1. public static Integer[] findKthLargest(List&lt;Integer[]&gt; list, int k) throws IllegalArgumentException {
  2. Integer[] arr = (Integer[]) list.toArray();
  3. insertionSort(arr, new ArrayComparator());
  4. System.out.println(Arrays.toString(arr));
  5. return arr[k];

I've tried casting the List<Integer[]> into an Object[] and then to an Integer[] but I run into the same error. I can't change the method header

I haven't finished the rest of the method's implementation yet so I placed a println to see if it'd provide me with roughly the results I expected.

答案1

得分: 1

以下是翻译好的部分:

无法使用以下代码:

  1. Integer[] arr = (Integer[]) list.toArray();

如果我理解您想要做的事情,您需要类似以下的代码:

  1. Integer[] arr = list.stream()
  2. .flatMap(Arrays::stream)
  3. .toArray(Integer[]::new);

示例:

  1. List<Integer[]> list = List.of(new Integer[]{1, 2, 3}, new Integer[]{4, 5, 5});
  2. Integer[] arr = list.stream()
  3. .flatMap(Arrays::stream)
  4. .toArray(Integer[]::new);

输出结果:

  1. [1, 2, 3, 4, 5, 5]
英文:

You can't use this:

  1. Integer[] arr = (Integer[]) list.toArray();

If I understand what you want to do, you need something like this:

  1. Integer[] arr = list.stream()
  2. .flatMap(Arrays::stream)
  3. .toArray(Integer[]::new);

Example:

  1. List&lt;Integer[]&gt; list = List.of(new Integer[]{1,2,3}, new Integer[]{4,5,5});
  2. Integer[] arr = list.stream()
  3. .flatMap(Arrays::stream)
  4. .toArray(Integer[]::new);
  5. &gt; [1, 2, 3, 4, 5, 5]

答案2

得分: 1

你需要使用类似以下的方法来做:

  1. Integer[][] arr = list.toArray(new Integer[0][]);

或者使用流。

英文:

You are going to have to do that with something like

  1. Integer[][] arr = list.toArray(new Integer[0][]);

or use streams.

huangapple
  • 本文由 发表于 2023年2月10日 03:38:16
  • 转载请务必保留本文链接:https://go.coder-hub.com/75403632.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定