Lambda表达式用于以固定的非自然顺序比较/排序有限值

时间:2015-02-23 03:41:58

标签: java sorting lambda compare

我尝试使用Lambda表达式进行排序,但问题是我无法按正常顺序排序(例如1,2,3,4)。我需要按其他顺序排序(例如2,1,3,4)。 有没有办法使用Lambda表达式来做到这一点?
以下是我想要转换为Lambda表达式的代码(如果可能):

private static Comparator<Card> bySuit = new Comparator<Card>() {
    public int compare(Card c1, Card c2) {
        int this_suit = c1.getSuit().value();
        int other_suit = c2.getSuit().value();

        if((this_suit == 2 && other_suit == 1) || (this_suit == 1 && other_suit == 2)){
            return other_suit - this_suit;
        }
        return this_suit - other_suit;
    }
};

修改
发现我可以使用:

private static Comparator<Card> bySuit = (c1, c2) -> {
        int this_suit = c1.getSuit().value();
        int other_suit = c2.getSuit().value();

        if((this_suit == 2 && other_suit == 1) || (this_suit == 1 && other_suit == 2)){
            return other_suit - this_suit;
        }
        return this_suit - other_suit;
};

但是有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

这与lambda表达式无关:如果您想要以固定顺序排序/比较的项目数量有限,则可以在数组中编写该顺序,然后比较数组中的值: / p>

int[] myOrder = {2, 1, 3, 4};
Comparator<Card> bySuit = (c1, c2) -> Integer.compare(
    myOrder[c1.getSuit().value() - 1], myOrder[c2.getSuit().value() - 1]);

如果要排序的值不是(几乎)不间断的范围,则可以使用Map<Key, Integer>