我有一个对象列表
List<myObj> myObjList
这里,myObj是一个具有以下结构的类:
public class myObj {
private String id;
private String pwd;
private String type;
//Getters/Setters
}
如果我有特定的ID,我想遍历列表来检查。我试过了:
for (obj : myObjList) {
if (MY_STRING.equals(obj.getId())) {
aBooleanFlag = true;
}
}
然而,当我想使用,包含方法时,它失败了。我使用它的方式是:
if(myObj.contains(MY_STRING)) {
aBooleanFlag = true;
}
你能说出错误以及解决方法吗
答案 0 :(得分:3)
.contains()
检查列表中的任何对象是否等于参数。
myObj
实例永远不会等于String
。
答案 1 :(得分:0)
更改
if(myObj.contains(MY_STRING)) {
aBooleanFlag = true;
}
到
if (myObj.getId().contains(MY_STRING)) {
aBooleanFlag = true;
}
答案 2 :(得分:0)
在循环中,您使用.equals(Object)
如果你想比较2个字符串,你应该使用.equalsIgnoreCase(String)
你也需要定义obj是什么。
所以这就是你的代码:
for (Object obj : myObjList) {
if (MY_STRING.equalsIgnoreCase(obj.getId())) {
aBooleanFlag = true;
}
}
如果使用if方法,则应检查List是否包含String 检查一个类是否包含String也无济于事 那么你的代码就是:
if(myObjList.contains(MY_STRING)) {
aBooleanFlag = true;
}
希望有所帮助
答案 3 :(得分:0)
您正在使用String
将MyObj
与整个equals
对象进行比较。这就像询问你的汽车是否等于轮毂盖(汽车的一部分)。
您可以遍历列表:
boolean found = false;
for (MyObj obj : myObjList) {
if (obj.getId().equals(MY_STRING)) {
found = true;
break;
}
}
或者您可以使用带有anyMatch()
的Java 8流和谓词:
boolean found = myObjList.stream().anyMatch(obj -> obj.getId().equals(MY_STRING));
或者您可以使用Map
代替List
,并按ID查看项目:
Map<String, MyObj> theMap = new HashMap<>();
// put MyObj's into the map by id
theMap.put(myObj.getId(), myObj);
// check for one using its id
boolean found = theMap.containsKey(MY_STRING);
我将类的名称从myObj
更改为MyObj
,因为约定是类名以Java中的大写字母开头。
答案 4 :(得分:-2)
您应该使用Map
而不是List.