使用映射键从Java映射中检索对象值

使用映射键从Java映射中检索对象值,java,Java,我试图通过构建一个包含用户名作为键和用户对象作为值的映射来同步到用户列表。一旦构建了地图,我就很难检索对象值。下面是我正在使用的代码 private Map<String, User> map = new HashMap<String, User>(); private Map=new HashMap(); 我正在填充贴图键和对象,如下所示 List<User> users = session.createCriteria(User.cla

我试图通过构建一个包含用户名作为键和用户对象作为值的映射来同步到用户列表。一旦构建了地图,我就很难检索对象值。下面是我正在使用的代码

private Map<String, User> map = new HashMap<String, User>();
private Map=new HashMap();
我正在填充贴图键和对象,如下所示

        List<User> users = session.createCriteria(User.class).list();

        for(ApplicationUser user : users) {
            map.put(user.getUserName(), user);
        }
List users=session.createCriteria(User.class.List();
for(应用程序用户:用户){
map.put(user.getUserName(),user);
}
我正试图按如下方式检索数据

        List<Person> persons = session.createCriteria(Person.class).list();
        for (Person p : persons) {
            User user = map.containsKey(p.getUsername()) ? map.get(p.getUsername()) : new User();
            //Email is always null. 
            System.out.println(user.getEmail());
        }
List persons=session.createCriteria(Person.class.List();
用于(人员p:人员){
User User=map.containsKey(p.getUsername())?map.get(p.getUsername()):新用户();
//电子邮件总是空的。
System.out.println(user.getEmail());
}

有人能帮我指出如何从地图中检索对象值的正确方向吗。谢谢

首先,您应该将循环更改为:

   for (Person p : persons) {
        String username = p.getUsername();
        User user = map.get(username);
        if (user != null) {
           System.out.println(user.getEmail());
        } else {
          System.out.println("User " + username + " is unknown");
        }
    }

然后在循环中设置断点并调试代码。到目前为止,它看起来是正确的。可能您只是没有在
User
中设置
email
,或者
persons
的用户不在您的
映射中

似乎email为空,因为您没有在User()的默认构造函数中初始化email,该构造函数在此处执行:

User User=map.containsKey(p.getUsername())?get(p.getUsername()):新用户()

在这里,我认为您在映射中输入的用户名与您在代码的第二部分中尝试检索的用户名不匹配。即。map.containsKey(p.getUsername())似乎返回false,默认构造函数将被调用,电子邮件为null


尝试打印(或调试检查)map keyset()和person用户名,并检查它们是否完全匹配

@George我想如果用户不属于person,您会得到一个nullpointer异常

 System.out.println(user.getEmail());

当条件为false时,User=new User();user.getEmail()为空

感谢您对代码清理的建议,但它似乎无法解决我的问题:(在第一个循环中,我测试了对象是否已加载到地图中并包含电子邮件。我的输出语句显示了电子邮件。在第二个循环中,似乎用户正在地图中被找到,并且不是空的,但不包含电子邮件。有什么建议吗?@George:如果它不包含电子邮件,那么用户可能没有电子邮件。)在数据库中设置电子邮件。在从数据库加载
用户后,使用调试器检查用户的值。用户在数据库中确实有电子邮件,当我最初在第一个循环中设置电子邮件时,我可以在第一个循环中使用循环2中使用的相同代码检索它。这两个循环都是从同样的方法。hashmap中包含电子邮件的对象在循环2时不知何故丢失了它的所有值。我很难为情地说,我们的第二个数据库字段值没有填充,这导致我们的insert删除了主数据库的值,导致了这一混乱。谢谢大家。不幸的是,这不是问题。我的地图包含所有与我的个人用户名完全匹配的密钥。你测试过吗?System.out.println(null)工作正常,它只打印null。我没有测试过这个…这就是为什么我写了“我想你会得到一个null指针…”