我正在尝试写一个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
相同。我上面的代码是对的吗?如果有错,请帮帮我。
答案 0 :(得分:22)
contains(Object o)
内部基于列表中的对象与您的输入as stated by the doc之间的equals
。
由于您说inputParam
是整数,因此您的代码的当前状态无法工作,因为您将整数与TeacherInfo
个对象进行比较,因此他们赢了永远不会平等。我相信您希望将inputParam
与TeacherInfo
个对象的特定字段进行比较。
如果您使用的是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++