色空大师 2024-07-30 14:37 采纳率: 40.9%
浏览 9
已结题

优化冗长重复的代码使其更简洁易读

如何优化下面这块冗长重复的代码

public GameBaseResult<?> startPetPool(String petLevel,int hid){
        PET_DRAW_POOL.clear();;
        List<GiftPet> giftPets = new ArrayList<>();
        LambdaQueryWrapper<PlayGift> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(PlayGift::getPetDraw,1)
                .eq(PlayGift::getState,GiftState.UP.getCode());
        List<PlayGift> playGifts = playGiftMapper.selectList(queryWrapper);
        playGifts.stream().forEach(g->{
            int price = g.getPrice();
            if (petLevel.equals(DrawLevel.FIVE.name())){
                if (33440 == price){
                    setPool(hid,g,1,giftPets);
                }else if (13140 == price){
                    setPool(hid,g,1,giftPets);
                }else if (5200 == price){
                    setPool(hid,g,2,giftPets);
                }else if (3340 == price){
                    setPool(hid,g,4,giftPets);
                }else if (1314 == price){
                    setPool(hid,g,8,giftPets);
                }else if (520 == price){
                    setPool(hid,g,20,giftPets);
                }else if (223 == price){
                    setPool(hid,g,20,giftPets);
                }else if (128 == price){
                    setPool(hid,g,40,giftPets);
                }else if (52 == price){
                    setPool(hid,g,40,giftPets);
                }else if (18 == price){
                    setPool(hid,g,84,giftPets);
                }else if (10 == price){
                    setPool(hid,g,80,giftPets);
                }else if (5 == price){
                    setPool(hid,g,80,giftPets);
                }else if (2 == price){
                    setPool(hid,g,80,giftPets);
                }
            }else if (petLevel.equals(DrawLevel.THREE.name())){
                if (5200 == price){
                    setPool(hid,g,1,giftPets);
                }else if (3340 == price){
                    setPool(hid,g,2,giftPets);
                }else if (1314 == price){
                    setPool(hid,g,4,giftPets);
                }else if (520 == price){
                    setPool(hid,g,8,giftPets);
                }else if (223 == price){
                    setPool(hid,g,20,giftPets);
                }else if (128 == price){
                    setPool(hid,g,20,giftPets);
                }else if (52 == price){
                    setPool(hid,g,20,giftPets);
                }else if (18 == price){
                    setPool(hid,g,20,giftPets);
                }else if (10 == price){
                    setPool(hid,g,40,giftPets);
                }else if (5 == price){
                    setPool(hid,g,40,giftPets);
                }else if (2 == price){
                    setPool(hid,g,40,giftPets);
                }
            }else if (petLevel.equals(DrawLevel.ONE.name())){
                if (1314 == price){
                    setPool(hid,g,1,giftPets);
                }else if (520 == price){
                    setPool(hid,g,4,giftPets);
                }else if (223 == price){
                    setPool(hid,g,6,giftPets);
                }else if (128 == price){
                    setPool(hid,g,10,giftPets);
                }else if (52 == price){
                    setPool(hid,g,20,giftPets);
                }else if (18 == price){
                    setPool(hid,g,20,giftPets);
                }else if (10 == price){
                    setPool(hid,g,40,giftPets);
                }else if (5 == price){
                    setPool(hid,g,40,giftPets);
                }else if (2 == price){
                    setPool(hid,g,40,giftPets);
                }
            }
        });
        PET_DRAW_POOL.put(DRAW_KEY_PREFIX+hid,giftPets);
        log.info("gift:{}",PET_DRAW_POOL.size());
        return GameBaseResult.ok(PET_DRAW_POOL.get(DRAW_KEY_PREFIX+hid));
    }

展开全部

  • 写回答

1条回答 默认 最新

  • 张彦峰ZYF Java领域优质创作者 2024-08-03 09:39
    关注

    可以使用 Map 来存储不同 petLevel 下每个价格对应的数量。然后在 playGifts 流中,通过查询这个 Map 来设置池子。

    public GameBaseResult<?> startPetPool(String petLevel, int hid) {
        PET_DRAW_POOL.clear();
        List<GiftPet> giftPets = new ArrayList<>();
        LambdaQueryWrapper<PlayGift> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(PlayGift::getPetDraw, 1)
                    .eq(PlayGift::getState, GiftState.UP.getCode());
        List<PlayGift> playGifts = playGiftMapper.selectList(queryWrapper);
    
        // 定义一个嵌套的 Map,存储每个 petLevel 下每个 price 对应的数量
        Map<String, Map<Integer, Integer>> petLevelPriceMap = new HashMap<>();
    
        // 初始化 Map
        petLevelPriceMap.put(DrawLevel.FIVE.name(), Map.of(
            33440, 1, 13140, 1, 5200, 2, 3340, 4, 1314, 8, 520, 20,
            223, 20, 128, 40, 52, 40, 18, 84, 10, 80, 5, 80, 2, 80
        ));
    
        petLevelPriceMap.put(DrawLevel.THREE.name(), Map.of(
            5200, 1, 3340, 2, 1314, 4, 520, 8, 223, 20, 128, 20,
            52, 20, 18, 20, 10, 40, 5, 40, 2, 40
        ));
    
        petLevelPriceMap.put(DrawLevel.ONE.name(), Map.of(
            1314, 1, 520, 4, 223, 6, 128, 10, 52, 20, 18, 20,
            10, 40, 5, 40, 2, 40
        ));
    
        // 获取当前 petLevel 对应的价格-数量映射
        Map<Integer, Integer> priceMap = petLevelPriceMap.get(petLevel);
    
        if (priceMap != null) {
            playGifts.forEach(g -> {
                Integer count = priceMap.get(g.getPrice());
                if (count != null) {
                    setPool(hid, g, count, giftPets);
                }
            });
        }
    
        PET_DRAW_POOL.put(DRAW_KEY_PREFIX + hid, giftPets);
        log.info("gift:{}", PET_DRAW_POOL.size());
        return GameBaseResult.ok(PET_DRAW_POOL.get(DRAW_KEY_PREFIX + hid));
    }
    
    
    

    展开全部

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 11月19日
  • 已采纳回答 11月12日
  • 创建了问题 7月30日

悬赏问题

  • ¥15 PADS Logic 原理图
  • ¥15 PADS Logic 图标
  • ¥15 电脑和power bi环境都是英文如何将日期层次结构转换成英文
  • ¥20 气象站点数据求取中~
  • ¥15 如何获取APP内弹出的网址链接
  • ¥15 wifi 图标不见了 不知道怎么办 上不了网 变成小地球了
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部