Группировка объектов по общему ключу - PullRequest
1 голос
/ 07 апреля 2010

У меня есть список клиентов. У каждого клиента есть адрес, и некоторые клиенты могут иметь один и тот же адрес. Моя конечная цель - группировать клиентов по их адресу. Я полагаю, что я мог бы либо поместить клиентов в какую-то структуру на основе списка и отсортировать адреса, либо я мог бы перетащить объекты в какую-то карту, которая допускает несколько значений на ключ.

Я сейчас сделаю красивую картинку:

List:
A1 - C1, A1 - C2, A2 - C3, A3 - C4, A3 - C5

Map:
A1 A2 A3
C1 C3 C4
C2    C5

Какой вариант (или любой другой) вы считаете лучшим решением? Существуют ли какие-либо классы, которые облегчат разработку?

Ответы [ 2 ]

4 голосов
/ 07 апреля 2010

Для этого вы можете использовать Map<K, Collection<V>>, где K - это адрес, а V - это клиент.Другой вариант - Google Collections Multimap<K, V>, который является более удобной оболочкой для Map<K, Collection<V>>.

1 голос
/ 07 апреля 2010

Вы можете сделать это, используя групповой метод Lambdaj. Примерно так:

Group<Customer> custByAddr = group(customers, by(on(Customer.class).getAddress().getId())

Вы можете получить список клиентов по группам, позвонив по номеру custByAddr.find("addressId1")

Узнайте больше на http://code.google.com/p/lambdaj/wiki/LambdajFeatures в разделе Группировка товаров.

Я не проверял это, но оно должно дать вам стартовую позицию. Я использовал LambdaJ много раз, и это чрезвычайно полезно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...