反转队列<整数>并将其转换为整数数组

2022-09-05 00:39:23

我有一个声明为,我需要反转其中的elments顺序,然后将其转换为int数组。我写了下面的代码:Queue<Integer>Queue<Integer> queue=new LinkedList();

Collections.reverse((List)queue);
int[] res=queue.stream().mapToInt(Integer::intValue).toArray();

此代码有两个问题:

  1. 显式转换(List)queue;
  2. 我想知道是否有一行解决方案。

那么,我们有什么更优雅的方法来做到这一点吗?


问题澄清:

队列是否反转并不重要。反转元素的int数组是我需要的。


答案 1

首先,请不要使用原始类型(请使用菱形运算符)。不是一个单行本,但你可以先转换为一个,然后使用commons lang ArrayUtils.reverse(int[])int[]

Queue<Integer> queue = new LinkedList<>();
// ...
int[] arr = queue.stream().mapToInt(Integer::intValue).toArray();
ArrayUtils.reverse(arr);

你也可以编写自己的反向方法,允许一个流畅的接口(例如,返回),然后你可以使它成为一个单衬里。喜欢int[]int[]

public static int[] reverse(int[] arr) {
    for (int i = 0; i < arr.length / 2; i++) {
        int temp = arr[i];
        arr[i] = arr[arr.length - i - 1];
        arr[arr.length - i - 1] = temp;
    }
    return arr;
}

然后

int[] arr = reverse(queue.stream().mapToInt(Integer::intValue).toArray());

答案 2

这里无需花哨。

static int[] toReversedArray(Queue<Integer> queue) {
    int i = queue.size();
    int[] array = new int[i];
    for (int element : queue) {
        array[--i] = element;
    }
    return array;
}

不是单行本,但易于阅读和快速。


推荐