简体   繁体   English

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

[英]Filtering a list in Java and put the results in a new arraylist

I want to filter an arraylist of CmisObjects and put the objects that are correct (correct with the filter) in another arraylist. 我想过滤CmisObjects的数组列表,然后将正确的对象(使用过滤器正确)放在另一个arraylist中。

I have 6 fields that need to be checked which are 1 text input, 3 select boxes and 2 date inputs. 我有6个字段需要检查,分别是1个文本输入,3个选择框和2个日期输入。 So i want the objects that match the values in the fields in the new arraylist. 所以我想要与新arraylist中的字段中的值匹配的对象。

I checked other questions on Stackoverflow, some of them were similar but I want to know if someone has a clearer answer with maybe some example code. 我检查了关于Stackoverflow的其他问题,其中一些是相似的,但是我想知道是否有人可能给出了一些示例代码来给出更清晰的答案。

Thanks in advance! 提前致谢!

EDIT Here is some code i have now, it only checks for 2 fields. 编辑这是我现在拥有的一些代码,它仅检查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>");

This seems to be somewhat straightforward if I know what you're asking. 如果我知道您的要求,这似乎很简单。 I'm guessing you want to add objects to an ArrayList<CmisObjects> if all 6 parameters match? 我猜想如果所有6个参数都匹配,则想向ArrayList<CmisObjects>添加对象吗? If so, you want something like this (pseudocode): 如果是这样,您想要这样的东西(伪代码):

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); 
    }
}

and then you can manipulate toReturn from there. 然后您可以操纵从那里返回。 Hope this helps! 希望这可以帮助!

=== ===

EDIT : You can consolidate a lot of those if statements, and to be very fair, you could probably break them up into boolean expressions. 编辑 :您可以合并很多这些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);
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM