Java if语句

Java if语句,java,if-statement,Java,If Statement,我能把这段代码写得更短吗?我想到了“如果”的说法 也许经过一段时间的循环 用于在数据库中搜索某个客户端的方法。这个方法很有效,但是这个if语句我想写得更短 谢谢 编辑已解决: public void searchKlijenta(KlijentiFormEvent klijentiFormEvent) throws SQLException { String nazivK = klijentiFormEvent.getNaziv(); String adresaK = klij

我能把这段代码写得更短吗?我想到了“如果”的说法

也许经过一段时间的循环

用于在数据库中搜索某个客户端的方法。这个方法很有效,但是这个if语句我想写得更短

谢谢

编辑已解决:

public void searchKlijenta(KlijentiFormEvent klijentiFormEvent) throws SQLException {

    String nazivK = klijentiFormEvent.getNaziv();
    String adresaK = klijentiFormEvent.getAdresa();
    String gradK = klijentiFormEvent.getGrad();
    String drzavaK = klijentiFormEvent.getDrzava();
    String telefonK = klijentiFormEvent.getTelefon();
    String faxK = klijentiFormEvent.getFax();
    String mailK = klijentiFormEvent.getMail();
    String mobitelK = klijentiFormEvent.getMobitel();
    String oibK = klijentiFormEvent.getOib();
    String ugovorK = klijentiFormEvent.getUgovor();
    String osobaK = klijentiFormEvent.getOsoba();

    if (nazivK.length() == 0) 
        nazivK = null;
    if (adresaK.length() == 0) 
        adresaK = null;
    if (gradK.length() == 0) 
        gradK = null;
    if (drzavaK.length() == 0) 
        drzavaK = null;
    if (telefonK.length() == 0) 
        telefonK = null;
    if (faxK.length() == 0) 
        faxK = null;
    if (mailK.length() == 0) 
        mailK = null;
    if (mobitelK.length() == 0) 
        mobitelK = null;
    if (oibK.length() == 0) 
        oibK = null;
    if (ugovorK.length() == 0) 
        ugovorK = null;
    if (osobaK.length() == 0) 
        osobaK = null;


    klijentiSearchModel.clear();

    String sql = "select * from zavrsni.klijenti where naziv like '"+nazivK+"' or adresa like '"+adresaK+"' or grad like '"+gradK+"' or drzava like '"+drzavaK+"' or telefon like '"+telefonK+"' or fax like '"+faxK+"' or mail like '"+mailK+"' or mobitel like '"+mobitelK+"' or oib like '"+oibK+"' or ugovor like '"+ugovorK+"' or osoba like '"+osobaK+"' ";
    Statement selectStmt = con.createStatement();
    ResultSet result = selectStmt.executeQuery(sql);

    while(result.next()) {
        int id = result.getInt("id");
        String naziv = result.getString("naziv");
        String adresa = result.getString("adresa");
        String grad = result.getString("grad");
        int posBr = result.getInt("posBr");
        String drzava = result.getString("drzava");
        String telefon = result.getString("telefon");
        String fax = result.getString("fax");
        String mail = result.getString("mail");
        String mobitel = result.getString("mobitel");
        String oib = result.getString("oib");
        String ugovor = result.getString("ugovor");
        String osoba = result.getString("osoba");

        KlijentiModelSearch klijentSearch = new KlijentiModelSearch(id, naziv, adresa, grad, posBr, drzava, telefon, fax, mail, mobitel, oib, ugovor, osoba);
        klijentiSearchModel.add(klijentSearch);
    }

    result.close();
    selectStmt.close();

}

您只需将数组/列表。。。不管那些东西是什么。。。放入另一个数组或列表

然后迭代该数组/列表

完成了

提示:您的命名可以大大改进。你的名字应该表明变量背后的“东西”是什么

还可以使用
Map>Map=newhashmap();
map.put(“nazivK”,newArrayList());
map.put(“adresaK”,新的ArrayList());
//.....
//将所有列表替换为空
map.replaceAll((s,list)->list.isEmpty()?null:list);
//或者干脆把它拿走

对于(迭代器和您的实际代码,您的评论问题中的@khelwood命题是最好的方法。
其他解决方案会增加开销,并在不带来附加值的情况下更改您的设计。

    Map<String, List<?>> map = new HashMap<>();
    map.put("nazivK", new ArrayList<>());
    map.put("adresaK", new ArrayList<>());
    //.....
    //replace all lists with null
    map.replaceAll((s, list) -> list.isEmpty() ? null : list);

    //or just remove it
    for(Iterator<Map.Entry<String, List<?>>> it = map.entrySet().iterator(); it.hasNext(); ) {
        Map.Entry<String, List<?>> entry = it.next();
        if(entry.getValue().isEmpty()) {
            it.remove();
        }
    }
然后你可以这样称呼它:

public static String returnNullIfEmpty(String value){
   if (value == null || value.length() == 0){
      return null;
   }
     return value;
}
编辑

通过编辑问题,您可以在从klijentiFormEvent对象检索值时包含处理:

nazivK = returnNullIfEmpty(nazivK);
adresaK= returnNullIfEmpty(adresaK);

正如GhostCat所建议的,将您的值放入数组/列表中。 例如,您可以这样做(我假设这些值是字符串):


变量是否有共同的类型,例如
String
?那么
nazivK=nazivK.length()如何==0?null:nazivK
等等?如果变量位于列表或数组中而不是单独命名,则可以在循环中完成所有操作。或者,可以编写方法
nullIfEmpty
并编写
nazivK=nullIfEmpty(nazivK);
等。如果变量具有相同的数据类型,则创建一个变量集合。迭代该集合并编写逻辑并记录:这样的代码是糟糕设计的征兆。不要只看这些代码;退后一步,让一些更有经验的人更多地查看您的项目。您在这里展示的内容肯定只是冰山一角;-)我声明的方法“public void searchKlijenta(KlijentiFormEvent KlijentiFormEvent)”KlijentiFormEvent是来自我的字段(字符串naziv=nazivField.getText())的数据,这样您的代码就不会产生我想要的结果..检查most be be be be BER sql语句..null most be be in sql语句如果if语句运行..我有用于搜索客户机的表单I数据库,如果某个内容的文本字段为空,我不想在数据库emtpy字段中搜索,即在搜索表单中必须键入一些文本..是的,现在可以了,谢谢。我有个问题,什么更好?1.调用方法的解决方案:telefonK=returnNullIfEmptys(telefonK);或2。nazivK=(nazivK.length()==0)?null:nazivK;第一个更好,因为你不重复逻辑。如果你必须改变它,你必须在一个地方做。除此之外,在第二个解决方案中,将
nazivK
变量重复3次。这意味着在添加新控件时,必须复制粘贴现有指令,并将变量名更改三次。它更容易出错。
nazivK = returnNullIfEmpty(nazivK);
adresaK= returnNullIfEmpty(adresaK);
String nazivK =  returnNullIfEmpty(klijentiFormEvent.getNaziv());
String adresaK = returnNullIfEmpty(klijentiFormEvent.getAdresa());
...
/* Order in array nazivK, adresaK, gradK, drzavaK, telefonK,
   faxK, mailK, mobitelK, oibK, ugovorK, osobaK */
   String values[] = new String[11];
   for (String val: values) {
       if (val == null || val.length() == 0) {
           val = null;
       }
   }