Guava's Table<R, C, V>
is a useful alternative to nested maps of the form Map<R, Map<C, V>>
. For example, if you want to store a collection of Person
objects keyed on both firstName
and lastName
, instead of using something like a Map<FirstName, Map<LastName, Person>>
, it is easier to use a Table<FirstName, LastName, Person>
.
Here is an example:
final Table<String, String, Person> table = HashBasedTable.create();
table.put("Alice", "Smith", new Person("Alice", "Smith"));
table.put("Bob", "Smith", new Person("Bob", "Smith"));
table.put("Charlie", "Jones", new Person("Charlie", "Jones"));
table.put("Bob", "Jones", new Person("Bob", "Jones"));
// get all persons with a surname of Smith
final Collection<Person> smiths = table.column("Smith").values();
// get all persons with a firstName of Bob
final Collection<Person> bobs = table.row("Bob").values();
// get a specific person
final Person alice = table.get("Alice", "Smith");
thanks for your input
ReplyDeleteAn awesomely simple example. Thank you !
ReplyDelete