我有一个像这样的java类:
public class Team {
private HashMap<String, User> users;
private int id_team;
private String nome;
...
}
像这样的xml文件:
<resultMap id="userJoinTeamResultMap" type="Team">
<id column="id_team" property="id_team" />
<result column="nome" property="nome" />
<collection property="users" javaType="HashMap" >
<id column="id_user" property="id" />
<result column="nome_user" property="nome" />
<result column="cognome" property="cognome" />
<result column="email" property="email" />
</collection>
</resultMap>
一个选择,它做了它必须做的事情。 但是当我尝试在我的hashmap中获取值时:
ArrayList<Team> listaTeam = getBlmTeam().getUserTeamFromCorso(jsonInput.getInt("id_corso"));
Iterator<Team> it = listaTeam.iterator();
while(it.hasNext()){
Team t = it.next();
Collection<String> set = t.getUsers().keySet();
Iterator it2 = set.iterator();
while(it2.hasNext()){
Object k = it2.next();
System.out.println("key:"+k.toString()+" value:"+t.getUsers().get(k));
}}
我的价值观是:
key:id value:103
key:email value:HSXB736GB
key:id value:105
key:email value:ZQFD4U
..
什么键是??? 在第一个团队中,有两个用户使用密钥102和103.但是每个用户都使用密钥“id”,因此,它们会被覆盖。
答案 0 :(得分:2)
您未正确使用HashMap
。你不想映射
id -> 103
email -> HSXB736GB
等。正如您所发现的那样,如果您这样做,那么您只能拥有一个用户,因为密钥必须是唯一的,因此当您添加新用户时,id
将被覆盖。
您要做的是将ID映射到用户对象
103 -> [user instance with ID 103]
105 -> [user instance with ID 105]
这意味着您需要HashMap<String,Utente>
而不是HashMap<Integer,Utente>
。然后你可以做像
Utente someUser = ...
map.put(someUser.getId(), someUser);
以后您可以使用
从地图中检索用户Utente someUser = map.get(id);
只要你知道身份证。
答案 1 :(得分:-1)
我决定使用
private Arraylist<User> users;
和
<collection property="users" javaType="ArrayList">