J'essaie d'écrire une condition if pour vérifier qu'une valeur existe dans une liste contenant de nombreux objets, Voici mon code:
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>");
}
après avoir exécuté la 1ère phrase, la méthode getTeacherInfoId()
renvoie avec succès une liste d'objets. Dans ces objets, je souhaite vérifier que tout objet a la même valeur que inputParam
. Est-ce que mon code ci-dessus est correct? Si vous vous trompez, aidez-moi.
contains(Object o)
est basé en interne sur equals
entre les objets de votre liste et votre entrée, comme indiqué dans le document doc .
Puisque vous avez dit que inputParam
est un entier, l'état actuel de votre code ne peut pas fonctionner car vous comparez un entier à des objets TeacherInfo
, ils ne seront donc jamais égaux. Je crois que vous voulez comparer inputParam
à un champ particulier d'objets TeacherInfo
.
Si vous utilisez Java 8, vous pouvez utiliser l'API de flux au lieu de 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
}
Pour les versions précédentes de Java, une alternative à contains()
consisterait à parcourir votre liste et à comparer manuellement votre entier au champ 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;
}
Ensuite:
List<TeacherInfo> teacherInfo=ServiceManager.getHelperService(TeacherManagementHelper.class, request, response).getTeacherInfoId();
if (containsTeacherId(teacherInfo, inputParam)) {
// contains the id
} else {
// does not contain the id
}
Remarque: Si vous n'avez pas besoin d'autres informations que l'ID lui-même, je suggérerais plutôt de renvoyer la liste des ID à partir d'une méthode appelée getTeacherIds()
, en particulier si cette information provient d'une base de données.
Vous devez parcourir la liste teacherInfo et comparer chaque élément de cette liste avec inputParam.
Vous trouverez ci-dessous un petit code de démonstration qui pourrait vous aider.
J'ai créé un testeurInfo analogue à votre professeurInfo et à un paramètre analogue à votre entréeParam.
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++
Non, ça ne marchera pas du tout. vous devriez itérer la liste 'teacherInfo' et vous devez remplacer les options compare () et hashvalue () de la classe d'objet.