色空大师 2024-07-30 22:37 采纳率: 42.3%
浏览 12
已结题

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

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

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 17: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月20日
  • 已采纳回答 11月12日
  • 创建了问题 7月30日