有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

用于Java和if循环代码优化的if语句

我有一个ArrayList<String>,我需要遍历它,列表中的内容必须执行某些操作。我希望优化迭代和比较,可以吗

我的代码:

Person类(包括getterssetters):

private String employeeID;

private String firstName;

private String lastName;

private String gender;

private String mobileNo;

private String emailID;

我的计算机ArrayListmyList- [firstName, gender, mobileNo, emailID]。我如何优化下面显示的逻辑以避免如此多的if条件

Person p =new Person ();
for(String element:myList)
        {
       if("employeeid".equalsIgnoreCase(element))
            {
                p.setemployeeID("");
            }
       if("firstname".equalsIgnoreCase(element))
            {
                p.setfirstName("");
            }
       if("lastName".equalsIgnoreCase(element))
            {
                p.setlastName("");
            }
       if("gender".equalsIgnoreCase(element))
            {
                p.setgender("");
            }
       if("mobileno".equalsIgnoreCase(element))
            {
                p.setMobileNo("");
            }
       if("emailid".equalsIgnoreCase(element))
            {
                p.setEmailID("");
            }
        }

共 (3) 个答案

  1. # 1 楼答案

    编译器能够优化语句切换到查找表中,并在处理枚举时对文本执行编译时检查。 也就是说,您应该始终使用switch语句进行3次以上的比较。因此,您的代码变为-

    private static final String EMPLOYEE_ID = "employeeid";
    private static final String FIRST_NAME = "firstname";
    private static final String LAST_NAME = "lastName";
    private static final String GENDER = "gender";
    private static final String MOBILE_NO = "mobileno";
    private static final String EMAIL_ID = "emailid";
    
    Person p =new Person ();
    for(String element: myList) {
    switch (element.toLowerCase()) {
      case EMPLOYEE_ID: p.setemployeeID("");
        break;
      case FIRST_NAME: p.setfirstName("");
        break;
      case LAST_NAME: p.setlastName("");
        break;
      case GENDER: p.setgender("");
        break;
      case MOBILE_NO: p.setMobileNo("");
        break;
      case EMAIL_ID: p.setEmailID("");
        break;
    }
    
    }
    
  2. # 2 楼答案

    这里没有太多的工作要做,但也许switch在美学上更令人愉悦。尽管您必须确保您的输入是仅小写仅大写

    for(String element:myList) {
        switch (element.toLowerCase()){
            case "employeeid": p.setemployeeID(""); break;
            case "firstname" : p.setfirstname(""); break;
            .
            .
            .
    
        }
    }
    

    如果您决定保留if设计,那么一定要使用if-else,这样您就不必在每次迭代中运行所有if

    最后,这可能不是设计你想要做的任何事情的最佳方式。您应该考虑一些更为面向对象的性质,比如在^ ^ {CD5}对象实例化时,将^ {< CD5> }对象的参数传递给构造函数。

    编辑:我知道您想要使用^{},您应该这样定义它:

    public enum MyEnum {
        EMPLOYEE_ID("employeeid"),
        FIRST_NAME("firstname")
        .
        .
        .
        ;
    
        private final String text;
    
        private MyEnum(final String text) {
            this.text = text;
        }
    
        @Override
        public String toString() {
            return text;
        }
    }
    
  3. # 3 楼答案

    我没有进行测试,但是(如果字符串和方法名称相同)可以使用反射,如下所示:

    Person p = new Person();
    for(String element : myList) {
    
        // method params
        Class[] paramTypes = new Class[1];
        paramTypes[0] = String.class;
    
        // method
        String methodName = "set" + element.indexOf(0,1).toUpperCase() + element.indexOf(1);
        Method m = c.getDeclaredMethod(methodName, paramTypes);
    
        // call method
        m.invoke(p, "");
    }