**Java使用Lambda表达式优化斗地主案例**

该博客展示了一个使用Java Lambda表达式优化斗地主游戏发牌和排序的案例。通过创建一个Lambda表达式作为比较方法,实现了对玩家手牌的快速排序。程序首先初始化并洗牌,然后使用Lambda表达式对玩家的手牌进行排序,最后打印出玩家的手牌和底牌。
摘要由CSDN通过智能技术生成

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值