java - 在Java中过滤列表并将结果放入新的数组列表中

标签 java list arraylist filter

我想过滤 CmisObjects 的数组列表,并将正确的对象(通过过滤器正确)放入另一个数组列表中。

我有 6 个字段需要检查,其中 1 个文本输入、3 个选择框和 2 个日期输入。所以我想要与新数组列表中字段中的值匹配的对象。

我检查了 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>");

最佳答案

如果我知道你在问什么,这似乎有点简单。我猜您想将对象添加到 ArrayList<CmisObjects>如果所有 6 个参数都匹配?如果是这样,你想要这样的东西(伪代码):

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

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

===

编辑:您可以合并许多 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);
}

关于java - 在Java中过滤列表并将结果放入新的数组列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24432194/

相关文章:

java - 构建 eclipselink-2.6.0 因缺少需求而失败

python - 将列表拆分为另一个列表指定的大小

java - 为什么要在从列表中删除元素之前检查这两个条件?

java - Android 共享首选项 - 类的数组列表

JAVA jdbc blob?

java - 使用 struts2 预填充表单元素并进行验证错误

python - 在Python中通过datedelta创建子列表

java - 如何使用输入来获取列表中的特定元素?

java - 用于推送通知和通知绑定(bind)的 ExchangeService 对象(EWS 应用程序)

python-3.x - 从列表和字典中制作字典