简体   繁体   中英

java for loop that runs list executes only once

The for loop in the code below only executes once. I was looking at similiar questions but those have something that breaks it like editing the list in the loop while I dont.

public String getProfileList(JSONObject obj, String uuid) {
    JSONObject profile = (JSONObject) obj.get("profiles");

    @SuppressWarnings("unchecked")
    ArrayList<String> list = new ArrayList<String>(profile.keySet());

    System.out.println(list);

    for (String object: list) {
        System.out.println(object);
        String isUUID = (String) ((JSONObject) profile.get(object)).get("mpm-data:uuid");
        System.out.println(object + " == " + isUUID);
        if (isUUID.equals(uuid)) {
            System.out.println("TRUE");
            return object;
        }
    }
    System.out.println("no profile found.");
    return null;
}

This code outputs this:

[5fb4acd48e7d422eabecd82e32fb03c6, 44d01181eae635d31f2cefe5e1f75cd4,e0e96e422659dfdc1ad16d53a37ee618, a3ae7136f900457290e99bd657db0385]
5fb4acd48e7d422eabecd82e32fb03c6
5fb4acd48e7d422eabecd82e32fb03c6 == null

For your console output you can see that isUUID is null . This means that when you attempt to call its method equals there is actually no object to call it to and you should be getting a NullPointerException . That's why it is best to do equals assertions with the part you know will not be null on the left side:

uuid.equals(isUUID) would be better.

Notice that if you do an equals assertion with a variable and a static string then it is best to do it like so:

"myCompareString".equals(myVariable) , since "myCompareString" can never be null whereas myVariable can.

if (isUUID.equals(uuid)) will throw a nullPointerException when isuuid is null.

You should check if the data is right, and handle the exception.

And you can use StringUtils.equals(String str1, String str2) in commons-lang.jar, then you don't need to handle the null yourself, see http://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/StringUtils.html

System.out.println(object + " == " + isUUID);

Code prints 5fb4acd48e7d422eabecd82e32fb03c6 == null and next statement you are using in if condition .If isUUID is null it should throw null pointer exception.Can you please check this point

if (isUUID.equals(uuid)) {
            System.out.println("TRUE");
            return object;
        }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM