2013-05-29 5 views
0

Я получаю дб данные таким способадобавляя длинный ключ и ArrayList значения HashMap

идентификатор пользователь, даты

1125,3-05-2013

1125,4-05-2013

1125,5-05-2013

200,23-05-2013

200,24-05-2013

Мне нужно добавить их в HashMap, как HashMap (идентификатор пользователя, даты) ..

т.е: HashMap (длинный, ArrayList (строка даты)) и отправить к переднему концу.

Я имею в виду долгое значение в HashMap должно быть уникальным, который является ключом к retrive список всех дат для определенного идентификатора пользователя,

так, если я пытаюсь hashmap.get(1125) == i должны получить список всех дат для пользователя 1125 как 3 -05-2013,4-05-2013,5-05-2013

тогда, если я пытаюсь hashmap.get(200) == i должны получить список всех дат для пользователя 200 как 23-05-2013,24-05-2013

Я пробовал этот путь, но я получаю все даты для одного пользователя, например:

users200 даты [3-05-2013, 4-05-2013, 5-05-2013, 23-05-2013, 24-05-2013]

Вот мой код,

// TODO Auto-generated method stub 

     List<User> myEmpls = new ArrayList<User>(); 

     User User1 = new User(); 
     User1.setEmpcode((long) 1125); 
     User1.setDate("3-05-2013"); 
     myEmpls.add(User1); 

     User User2 = new User(); 
     User2.setEmpcode((long) 1125); 
     User2.setDate("4-05-2013"); 
     myEmpls.add(User2); 

     User User5 = new User(); 
     User5.setEmpcode((long) 1125); 
     User5.setDate("5-05-2013"); 
     myEmpls.add(User5); 

     User User3 = new User(); 
     User3.setEmpcode((long) 200); 
     User3.setDate("23-05-2013"); 
     myEmpls.add(User3); 

     User User4 = new User(); 
     User4.setEmpcode((long) 200); 
     User4.setDate("24-05-2013"); 
     myEmpls.add(User4); 



     long prevUser=0; 
     int cnt=1; 
     long users =0; 
     ArrayList<ArrayList<String>> lists = new ArrayList<ArrayList<String>>(); 
     HashMap<Long, ArrayList> finalmap = new HashMap<>(); 
     ArrayList<String> dates = new ArrayList<>(); 
     for(User time : myEmpls) 
     { 
      if(prevUser==time.getEmpcode()) 
      { 
       users = time.getEmpcode(); 
       System.out.println("users"+users); 
       dates.add(time.getDate()); 
      } 
      else 
      { 
       dates.add(time.getDate()); 
      } 
      System.out.println("dates"+dates); 
      finalmap.put(users, lists); 
      prevUser = time.getEmpcode(); 
      cnt++; 
     } 

Может кто-нибудь мне помочь в этом вопросе?

+0

Если вам разрешено использовать Google Guava, вы можете взглянуть на MultiMap. – biziclop

+0

@biziclop: Как это помогает OP? Пожалуйста, подумайте, почему «MultiMap» поможет OP решить свою проблему ... – Aquillo

+1

Ваша проблема в том, что у вас есть только один общий экземпляр ArrayList, а не один на один. –

ответ

1

делать, как ... это более простой:

class User { 
    private Long id; 
    private String date; 

    public User(Long id, String date) { 
     this.id = id; 
     this.date = date; 
    } 

    public Long getId() { 
     return this.id; 
    } 

    public String getDate() { 
     return this.date; 
    } 
} 

List<User> listUsers = new ArrayList<User>(); 
listUsers.add(new User(new Long(2500), "03/05/2013")); 
listUsers.add(new User(new Long(2500), "04/05/2013")); 
listUsers.add(new User(new Long(2500), "05/05/2013")); 
listUsers.add(new User(new Long(200), "10/05/2013")); 
listUsers.add(new User(new Long(200), "18/05/2013")); 

HashMap<Long, ArrayList> map = new HashMap<Long, ArrayList>(); 

for(User user : listUsers) {   
    if(map.containsKey(user.getId())) { 
     map.get(user.getId()).add(user.getDate()); 
    } else { 
     ArrayList<String> dates = new ArrayList<String>(); 
     dates.add(user.getDate()); 
     map.put(user.getId(), dates); 
    } 
} 

//just to check 
System.out.println("number of keys : " + map.size()); 
System.out.println("number of dates for 2500 : " + map.get(new Long(2500)).size()); 
System.out.println("number of dates for 200 : " + map.get(new Long(200)).size()); 
3
Map<Long,ArrayList<String>> map=new HashMap<Long,ArrayList<String>>(); 
public void addToMap(long id,String blaa) 
{ 
    ArrayList<String> ar=map.get(id) 
    if(ar==null) 
    { 
      ar=new ArrayList<String>(); 
      map.put(id,ar); 
    } 
    ar.add(blaa); 
} 

Это то, что вы хотите? просто назвать это для каждой строки вы получаете

+0

и, естественно, если вы хотите, чтобы arraylist со строками для определенного долгого времени, просто выполните map.get (id) –

-1

использовать что-то вроде этого:

HashMap<Long, ArrayList> finalmap = new HashMap<Long, ArrayList>(); 
for(User obj : myEmpls){ 

     if(finalmap.containsKey(obj.getEmpcode())){ 
      ArrayList<String> dates = finalmap.get(obj.getEmpcode()); 
      dates.add(obj.getDate()); 
      finalmap.put(obj.getEmpcode(), dates); 
     }else{ 
      ArrayList<String> dates = new ArrayList<String>(); 
      dates.add(obj.getDate()); 
      finalmap.put(obj.getEmpcode(), dates); 
     } 

    } 
+0

не нужно добавлять массив «дат» к одной карте с тем же ключом снова и снова. Также вам не указан параметр типа для ArrayList в объявлении карты –

+0

Markus Mikkolainen, я согласен с вами. Ты прав – Satya

Смежные вопросы