if else和for循环的套娃,break的使用

需求:

有两个集合A和B

A:集合中包含对象,对象中有两个属性,k1,v1
例如:A中的a1对象,k1="a1",v1="23.1"

B:集合中包含对象,对象的属性中包含一个string类型的数组,每个数组设置上限长度为50,集合的size也不能超过五十,目前该集合中已有三十多个,但要排除其中六个,根据名字进行排除,例如:可用的都为固定格式开头“我是自建1、我是自建2....”

B集合的对象b1:我是自建1(名字),数组,数组的长度,等属性

提示:需要将A集合v1的值添加到B集合的对象的数组中,不可超过数组长度,已有分组不足时才可进行新建。

 

package job;


import com.aliyun.openservices.log.exception.LogException;
import models.bean.BlackIP;
import models.bean.LogIpBlack;
import models.bean.MyBlackList;
import models.test.IPBlackTest;
import play.jobs.Every;
import play.jobs.Job;
import utils.IPGroupCRUD;

import java.util.Arrays;
import java.util.List;

/**
 * @author zd
 * @create 2022-10-09 16:50
 */
@Every("5mn")
public class BlackIPJob extends Job {
    public void doJob() throws LogException {
        System.out.println("job执行了*****************************************************");
        /**
         * 获取log中的可疑IP,li记录添加的索引
         */
        List<LogIpBlack> logIPList = IPGroupCRUD.getLogIP();
//模拟八百个值填满分组
        for (int i = 0; i < 800; i++) {
            LogIpBlack logIp = new LogIpBlack("2", "23.34.1." + i);
            logIPList.add(logIp);
        }

        /**
         * 创建返回结果的对象
         */
        String addResult = "";
        BlackIP blackIP = new BlackIP();

        /**
         * 判断ip是否已经存在
         */
 allFor:
        for (LogIpBlack logIpBlack : logIPList) {
            /**
             * 获取所有IP黑名单分组信息
             */
            List<MyBlackList> blackList = IPGroupCRUD.getBlackList();
//已有的分组中有六个为不可添加分组
            int myGroup = blackList.size() - 6;

            String logValue = logIpBlack.logValue;//获取值

            boolean ipExist = BlackIPJob.selectByIP(logValue, blackList);//通过方法获取返回值
            //判断IP是否存在
            if (ipExist == false) {
                //不存在则进行添加,循环IP分组
                ipFor:
                for (MyBlackList myBlackList : blackList) {

                    if (myBlackList.ipName.startsWith("IP黑名单") && myBlackList.ipList < 50) {
                        String ips = "";
                        ips = ips + logValue + ",";
                        //取出原来的数据
                        String s = "";
                        for (String groupIP : myBlackList.groupIPs) {
                            s = s + groupIP + ",";
                        }

                        String s1 = ips + s;
                        ips = s1.substring(0, s1.length() - 1);

                        System.out.println(ips);
                        //修改IP分组
                        IPGroupCRUD.alterIPGroup(myBlackList.ipId, ips, myBlackList.ipName, myBlackList.version, "block");
                        blackIP.add_result = "分组添加成功!";
                        break ipFor;//添加成功跳出循环,进行下一个IP值循环,否则会造成重复添加
                        //判断当前对象是否为集合中最后一个
                    } else if (blackList.size() - 1 == blackList.indexOf(myBlackList)) {
                        if (blackList.size() > 49) {//大于49则证明无法进行新建
                            blackIP.add_result = "新建分组失败!分组已满,请联系管理员处理。";
                           break allFor;
                        }
                        System.out.println("**********新建");
                        String name = "IP黑名单" + (myGroup + 1);
                        IPGroupCRUD.addIPGroup("block", name, "custom_acl", 1, "IP", "");//新建分组
                        doJob();//重新调用方法,刷新执行

                    }
                }

            }

        }
        blackIP.save();//保存对象到数据库
    }

    /**
     * 根据传入的ip判断是否存在
     *
     * @param ips
     */
    public static boolean selectByIP(String ips, List<MyBlackList> blackList) {
        boolean res = false;
        for (MyBlackList myBlackList : blackList) {
            String[] groupIPs = myBlackList.groupIPs;
            for (int i = 0; i < groupIPs.length; i++) {
                if (groupIPs[i].equals(ips)) {
                    res = true;
                }
            }
        }
        return res;
    }
}

如有好的方法可提升效率,欢迎讨论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值