Java使用Lambda表达式优化斗地主案例
思路:使用Lambda作为比较方法的参数和返回值。
```java
import java.util.*;
public class MMain {
public static void main(String[] args) {
//准备牌
ArrayList<String> arr = new ArrayList<>();
String[] color = {"♠", "♥", "♣", "♦"};
String[] size = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};
for (String a : size) {
for (String b : color) {
arr.add(b + a);
}
}
arr.add("小王");
arr.add("大王");
//拷贝新列表当做排序标准
ArrayList<String> new_arr = (ArrayList<String>) arr.clone();
//洗牌
Collections.shuffle(arr);
//发牌
int card_number = 54;
ArrayList<String> playA = new ArrayList<>();
ArrayList<String> playB = new ArrayList<>();
ArrayList<String> playC = new ArrayList<>();
for (int i = 0; i < (card_number - 3); i += 3) {
playA.add(arr.remove(0));
playB.add(arr.remove(1));
playC.add(arr.remove(2));
}
//排序
playA.sort(myComparator(new_arr));
playB.sort(myComparator(new_arr));
playC.sort(myComparator(new_arr));
//看牌
System.out.println("玩家A:" + playA);
System.out.println("玩家B:" + playB);
System.out.println("玩家C:" + playC);
System.out.println("底 牌:" + arr);
}
//Lambda作为方法的返回值
public static Comparator<String> myComparator(ArrayList<String> arr) {
return (o1, o2) -> arr.indexOf(o1) - arr.indexOf(o2);
}
}
结果:
玩家A:[♥3, ♣3, ♦3, ♦4, ♠5, ♥6, ♥7, ♠9, ♦10, ♥J, ♣Q, ♠K, ♥K, ♣K, ♦K, ♠2, 小王]
玩家B:[♥5, ♦5, ♣6, ♠7, ♥8, ♦9, ♠10, ♥10, ♣10, ♣J, ♥Q, ♠A, ♥A, ♦A, ♥2, ♣2, ♦2]
玩家C:[♠3, ♠4, ♥4, ♣4, ♣5, ♠6, ♦6, ♣7, ♠8, ♣8, ♦8, ♥9, ♠J, ♦J, ♠Q, ♦Q, 大王]
底 牌:[♣A, ♣9, ♦7]
Process finished with exit code 0