aykut
aykut

Reputation: 563

ConcurrentHashMap foreach loop problem

I have a concurrenthashmap called users. I have user objects in it with some integer keys that is not id. I want to find the user with a given id. Therefore, I check all elements of hashmap and return the user object if it is present. Here is my code :

    for(User u : users.values()) {
        logger.error("u.getId() : " + u.getId());
        logger.error("id : " + id );
        if( u.getId() == id ) {
            logger.error("match");
            return u;
        }
    }
    logger.error("Not found: id:" + id);
    for(User u : users.values()) {
        logger.error(u.getPos() + ". user: " + u.getId());
    }

However even tough my u.getId() and id are the same I cannot see "match" at my logs.

213 matches but It can not enter the following if statement. here are my logs:

enter image description here

What do you think about it?

Upvotes: 4

Views: 3000

Answers (2)

Eugene Kuleshov
Eugene Kuleshov

Reputation: 31795

What type returned from User.getId() method and what type of id variable? If it is not a primitive type, you need to use equals() instead of ==.

By the way, a good static code analyzer like FindBugs can find such kind of errors.

Upvotes: 6

Jon Skeet
Jon Skeet

Reputation: 1503779

You haven't shown the types involved, but is it possible that id or getId() is an Integer instead of an int? If so, you'll be comparing references, so you should just use

if (u.getId().equals(id))

to compare the values within the Integer objects. Be careful if getId can return null though...

Upvotes: 4

Related Questions