循环使用Java中的列表来检查值

时间:2014-10-21 21:55:35

标签: java

我有一个对象列表

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

你能说出错误以及解决方法吗

5 个答案:

答案 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)

您正在使用StringMyObj与整个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.