Java Hashset Search - PullRequest
       4

Java Hashset Search

0 голосов
/ 04 июня 2011

Добрый день

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

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

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

email            | group   | machinename
----------------------------------------
robert@yahoo.com | hewitt  | AP1
Mathew@gmail.com | test    | AP1
melody@app.com   | test    | AP1
nick@ac.co       | test    | AP1
robert@yahoo.com | project | AP1
nick@ac.co       | project | AP1

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

nick@ac.co (which has "project" and "test" group)
robert@yahoo.com (which has "hewitt" and "test" groups)

Как я могу найти это, используя код Java?

1 Ответ

3 голосов
/ 04 июня 2011

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

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>
}
...