2011-06-04 3 views
0

Доброго дняJava HashSet Поиск

В Java, у меня есть HashSet, который содержит список объектов User, который имеет свойство:

  • электронной
  • группа
  • имя_компьютер

сейчас мой hashset имеет следующие значения (список вышеуказанного объекта)

email   | group | machinename 
---------------------------------------- 
[email protected] | hewitt | AP1 
[email protected] | test | AP1 
[email protected] | test | AP1 
[email protected]  | test | AP1 
[email protected] | project | AP1 
[email protected]  | project | AP1 

Теперь я должен найти те записи, которые имеет тот же адрес электронной почты и машины, но другое название группы, которая в описанном выше случае являются:

[email protected] (which has "project" and "test" group) 
[email protected] (which has "hewitt" and "test" groups) 

Как я могу найти, что с помощью Java-код?

+0

Я всегда делаю сейчас .. – Makky

+0

Это не дубликат http://stackoverflow.com/questions/6212325/iterating-hashsets? –

+0

yup !! но не мог получить ответ там, поэтому пришлось повторить вопрос – Makky

ответ

3

Это будет делать именно то, что вы хотите:

Set<User> users = new HashSet<User>(); 
// ... 

Map<String, List<User>> hits = new HashMap<String, List<User>>(); 

for (User user : users) { 
    String key = user.getMachineName() + user.getEmail(); 
    List<User> list = hits.get(key); 
    if (list == null) { 
     list = new ArrayList<User>(); 
     hits.put(key, list); 
    } 
    list.add(user); 
} 

// Users are now grouped by their "machine name + email" as a single key 

for (Map.Entry<String, List<User>> hit : hits.entrySet()) { 
    if (hit.getValue().size() < 2) continue; 
    System.out.println("These users share the same email and machine name: " 
     + hit.getValue()); // hit.getValue() is an ArrayList<User> 
}