Group by field name in Java

London picture London · Mar 22, 2011 · Viewed 28.7k times · Source

I'm trying to group Java objects by their field, i.e Person.java

public class Person {
    String name;
    String surname;
    ....
}

So if I have n Person objects, what would be the easiest way to get all people name "David" into a map like Map<String, List<Person>> map;?

I found this on Google (but it doesn't compile), it seems to be the thing I'm looking for: http://www.anzaan.com/2010/06/grouping-objects-using-objects-property/

Answer

Kaleb Brasee picture Kaleb Brasee · Mar 22, 2011

There's probably a library that can do this more simply, but it's not too hard to do it manually:

List<Person> allPeople; // your list of all people
Map<String, List<Person>> map = new HashMap<String, List<Person>>();
for (Person person : allPeople) {
   String key = person.getName();
   if (map.get(key) == null) {
      map.put(key, new ArrayList<Person>());
   }
   map.get(key).add(person);
}

List<Person> davids = map.get("David");