我尝试使用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;
};
但是有更好的方法吗?
答案 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>
。