有 Java 编程相关的问题?

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

用Java过滤列表并将结果放入新的arraylist

我想过滤一个CmisObjects的arraylist,并将正确的对象(使用过滤器正确)放在另一个arraylist中

我有6个需要检查的字段,分别是1个文本输入、3个选择框和2个日期输入。因此,我希望对象与新arraylist中字段中的值匹配

我检查了Stackoverflow上的其他问题,其中一些问题是类似的,但我想知道是否有人有一个更清晰的答案,也许有一些示例代码

提前谢谢

编辑 这是我现在的一些代码,它只检查2个字段

    String zoekterm = request.getParameter("zoekterm").toLowerCase();
    String zoektermselect = request.getParameter("zoektermselect");
    String startdatum = request.getParameter("startdatum");
    String einddatum = request.getParameter("einddatum");
    String status = request.getParameter("status");
    String type = request.getParameter("type");
    ArrayList<CmisObject> alleDossiers = (ArrayList<CmisObject>) request.getSession().getAttribute("alledossiers");
    ArrayList<CmisObject> filterlist = new ArrayList<CmisObject>();
    for (CmisObject dossier : alleDossiers) {
        String dossiernaam = dossier.getName().toLowerCase();
        String dossierexternepartij = ((String) dossier.getPropertyValue("oc:bedrijfsnaam")).toLowerCase();;
        String dossierstatus = ((String) dossier.getPropertyValue("oc:contractstatus"));
        String dossiertype = ((String) dossier.getPropertyValue("oc:contracttype"));
        if (zoektermselect.equals("Alle")) {
            if (dossiernaam.contains(zoekterm) || dossierexternepartij.contains(zoekterm)) {
                filterlist.add(dossier);
            }
        }
        if (zoektermselect.equals("Dossiernaam")) {
            if (dossiernaam.contains(zoekterm)) {
                filterlist.add(dossier);
            }
        }
        if (zoektermselect.equals("Externe partij")) {
            if (dossierexternepartij.contains(zoekterm)) {
                filterlist.add(dossier);
            }
        }
    }
    PrintWriter out = response.getWriter();
    out.println("<html><head></head><body>");
    int counter = 1;
    for (CmisObject dossier : filterlist) {
        out.println("<div id='noderef" + counter + "'>" + dossier.getId() + "</div>");
        out.println("<div id='dossiernaam" + counter + "'>" + dossier.getName() + "</div>");
        out.println("<div id='externepartij" + counter + "'>" + dossier.getPropertyValue("oc:bedrijfsnaam") + "</div>");
        out.println("<div id='contracttype" + counter + "'>" + dossier.getPropertyValue("oc:contracttype") + "</div>");
        counter++;
    }
    out.println("<div id='counter'>" + counter + "</div></body></html>");

共 (1) 个答案

  1. # 1 楼答案

    如果我知道你在问什么,这似乎有点直截了当。我猜如果所有6个参数都匹配,您想向ArrayList<CmisObjects>添加对象吗?如果是这样,您需要这样的内容(伪代码):

    ArrayList<CmisObject> toReturn = new ArrayList<CmisObject>(); 
    for(int i = 0; i < yourArrayListOfCmisObjects.size(); i++){
        CmisObject obj = yourArrayListOfCmisObjects.get(i); 
        if(obj.getParam1() == param1 && obj.getParam2() == param2 && ... obj.getParam6() == param6){
           toReturn.add(obj); 
        }
    }
    

    然后你可以从那里返回。希望这有帮助

    ===

    EDIT:您可以合并许多if语句,公平地说,您可以将它们分解为boolean表达式

    boolean bool1 = (zoektermselect.equals("Alle") && (dossiernaam.contains(zoekterm) || dossierexternepartij.contains(zoekterm)); 
    boolean bool2 = (zoektermselect.equals("Dossiernaam") && dossiernaam.contains(zoekterm);
    boolean bool3 = zoektermselect.equals("Externe partij") && dossierexternepartij.contains(zoekterm);
    if(bool1 || bool2 || bool3){ 
        filterlist.add(dossier);
    }