1

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

private Map<String, User> map = new HashMap<String, User>();

我正在填充地图键和对象,如下所示。

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

        for(ApplicationUser user : users) {
            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());
        }

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

4

3 回答 3

4

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

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

然后在循环中设置断点并调试您的代码。到目前为止它看起来是正确的。也许您只是没有设置emailUser或者来自的用户persons不在您的map.

于 2012-05-08T16:05:30.980 回答
0

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

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

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

尝试打印(或调试检查)地图 keyset() 和人员用户名,并检查它们是否完全匹配。

于 2012-05-08T16:16:47.560 回答
-1

@George我认为如果用户不属于人,你会得到一个空指针异常。

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

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

于 2012-05-08T16:24:30.853 回答