堆栈反向和排序

时间:2018-01-30 19:59:56

标签: java sorting stack

我有一个数据结构Stack.Where堆栈内的堆栈。

Stack<Stack<Integer>> stack = new Stack<>();
Stack<Integer> stackI1 = new Stack<>();
Stack<Integer> stackI2 = new Stack<>();
Stack<Integer> stackI3 = new Stack<>();

我已经将一些元素推入其中。看起来像[[1,2,3],[4,5,6],[7,8,9]]   现在我想将那些元素方面排序到第一个值意味着对1,4,7。怎么可能?无法找到功能。无法使用Collection.sort进行排序。那么替代方案将在哪里。也需要在排序后反转。但是无法在函数Collection.reverse中进行反转。请帮帮我

1 个答案:

答案 0 :(得分:1)

Stack扩展了Vector,因此您可以使用List#sort来诉诸Stack(如评论中所述,这非常“不寻常”)。您提供的值导致已经“排序”的堆栈,因此我更改了它以显示代码对其产生的影响:

import java.util.Stack;

public class StackSort {

    public final static void main(String[] args) {
        Stack<Stack<Integer>> stacks = new Stack<>();
        Stack<Integer> stackI1 = new Stack<>();
        stackI1.push(Integer.valueOf(1));
        stackI1.push(Integer.valueOf(2));
        stackI1.push(Integer.valueOf(3));
        Stack<Integer> stackI2 = new Stack<>();
        stackI2.push(Integer.valueOf(7));
        stackI2.push(Integer.valueOf(8));
        stackI2.push(Integer.valueOf(9));
        Stack<Integer> stackI3 = new Stack<>();
        stackI3.push(Integer.valueOf(4));
        stackI3.push(Integer.valueOf(5));
        stackI3.push(Integer.valueOf(6));

        stacks.push(stackI1);
        stacks.push(stackI2);
        stacks.push(stackI3);

        System.out.println(stacks);

        stacks.sort((stack1, stack2) -> {
            if (stack1.isEmpty()) {
                return stack2.isEmpty() ? -1 : 0;
            }
            if (stack2.isEmpty()) {
                return 1;
            }

            return stack1.get(0).compareTo(stack2.get(0));
        });

        System.out.println(stacks);
    }
}