条件检查包含对象的列表中是否存在值,

时间:2014-04-28 08:32:02

标签: java list

我正在尝试写一个if条件来检查包含许多对象的列表中是否存在一个值, 这是我的代码:

List<TeacherInfo> teacherInfo=ServiceManager.getHelperService(TeacherManagementHelper.class, request, response).getTeacherInfoId();
if(teacherInfo.contains(inputParam))
{
    out2.println("<font color=red>");
    out2.println("Id Not Available");
    out2.println("</font>");
 }
 else
 {
    out2.println("<font color=green>");
    out2.println("Id Available");
    out2.println("</font>");        
 }

执行第一句getTeacherInfoId()方法后成功返回一个对象列表,在那些我要检查的对象中,任何对象的值都与inputParam相同。我上面的代码是对的吗?如果有错,请帮帮我。

3 个答案:

答案 0 :(得分:22)

contains(Object o)内部基于列表中的对象与您的输入as stated by the doc之间的equals

由于您说inputParam整数,因此您的代码的当前状态无法工作,因为您将整数与TeacherInfo个对象进行比较,因此他们赢了永远不会平等。我相信您希望将inputParamTeacherInfo个对象的特定字段进行比较。

如果您使用的是Java 8,则可以使用流API而不是contains()

List<TeacherInfo> teacherInfo=ServiceManager.getHelperService(TeacherManagementHelper.class, request, response).getTeacherInfoId();
if (teacherInfo.stream().anyMatch(ti -> ti.getId() == inputParam)) {
    // contains the id
} else {
    // does not contain the id
}

对于以前的java版本,contains()的替代方法是迭代列表并手动将整数与TeacherInfo字段进行比较:

private static boolean containsTeacherId(List<TeacherInfo> teacherInfos, int id) {
    for (TeacherInfo ti : teacherInfos) {
        if (ti.getId() == inputParam) { // I used getId(), replace that by the accessor you actually need
            return true;
        }
    }
    return false;
}

然后:

List<TeacherInfo> teacherInfo=ServiceManager.getHelperService(TeacherManagementHelper.class, request, response).getTeacherInfoId();
if (containsTeacherId(teacherInfo, inputParam)) {
    // contains the id
} else {
    // does not contain the id
}

注意:如果您不需要ID本身以外的其他信息,我建议您从名为getTeacherIds()的方法中返回ID列表,尤其是在此信息的情况下来自DB。

答案 1 :(得分:0)

不,它根本不会工作。你应该迭代老师信息&#39;列表,您需要覆盖对象类的compare()和hashvalue()。

答案 2 :(得分:0)

您需要遍历列表teacherInfo并将该列表的每个元素与inputParam进行比较。

下面是一个可能对您有帮助的小型演示代码。

我创建了一个类似于你的teacherInfo和param的testerInfo,类似于你的inputParam。 我希望它有所帮助。

Tester.java

/**
 * 
 */
package com.demo;

/**
 * @author Parul
 *
 */
public class Tester {

    private int id;
    private String name;
    /**
     * @return the id
     */
    public int getId() {
        return id;
    }
    /**
     * @param id the id to set
     */
    public void setId(int id) {
        this.id = id;
    }
    /**
     * @return the name
     */
    public String getName() {
        return name;
    }
    /**
     * @param name the name to set
     */
    public void setName(String name) {
        this.name = name;
    }
    public Tester(int id, String name) {
        this.id = id;
        this.name = name;
    }
    public Tester() {

    }

}

Demo.java

/**
 * 
 */
package com.demo;

import java.util.ArrayList;
import java.util.List;

/**
 * @author Parul
 *
 */
public class Demo {

    public static void main(String [] args){

        List<Tester> testerInfo=new ArrayList<Tester>();
        testerInfo.add(new Tester(1,"Java"));
        testerInfo.add(new Tester(2,"C++"));
        testerInfo.add(new Tester(3,"Python"));
        testerInfo.add(new Tester(4,"C"));
        Tester tester=null;
        int param=2;
        for(int i=0;i<testerInfo.size();i++){
            tester=testerInfo.get(i);
            if(tester.getId()==param){
                System.out.println("param found: "+tester.getName());
                break;
            }

        }


    }


}

OUTPUT
param found: C++