Collections.reverse 仅暗示List,这只是Collection 的一种类型,您不能将Queue 转换为List。但您可以尝试将其转换为 LinkedList 为:
Collections.reverse((LinkedList)queue);
详情:
我怀疑是否有用于反转队列的内置 API。您仍然可以使用Stack 作为常规方式:
Stack<Integer> stack = new Stack<>();
while (!queue.isEmpty()) {
stack.add(queue.remove());
}
while (!stack.isEmpty()) {
queue.add(stack.pop());
}
然后根据需要转换为数组
int[] res = queue.stream().mapToInt(Integer::intValue).toArray();
另一方面,如果 Deque 目前满足您的需求,您可以简单地依赖 LinkedList 本身,因为它也实现了 Deque。那么您当前的实现将非常简单:
LinkedList<Integer> dequeue = new LinkedList<>();
Collections.reverse(dequeue);
int[] res = dequeue.stream().mapToInt(Integer::intValue).toArray();
队列是否颠倒并不重要。一个 int 数组
颠倒的元素是我需要的。
其他人已经建议的另一种解决方案是将Stream 的queue 反转,然后将mapToInt 转换为数组:
Queue<Integer> queue = new LinkedList<>();
int[] res = reverse(queue.stream()).mapToInt(Integer::intValue).toArray();
这使用了 Stuart Marks in this answer 建议的实用程序 reverse,这样:
@SuppressWarnings("unchecked")
static <T> Stream<T> reverse(Stream<T> input) {
Object[] temp = input.toArray();
return (Stream<T>) IntStream.range(0, temp.length)
.mapToObj(i -> temp[temp.length - i - 1]);
}