2012-03-19 3 views
0

У меня есть требование, в котором я буду извлекать все записи из БД в отсортированной форме. Эти записи будут отсортированы по полю «EnteredIds» в DB. Я получаю эти записи отлично. Я размещаю эти записи на Карте. Так что, конечно, у меня будет карта, как:Как объединить объекты, имеющие одинаковое/общее поле?

<field1, EnteredId1> 
<field4, EnteredId1> 
<field3, EnteredId1> 
<field2, EnteredId1> 
<field6, EnteredId2> 
<field1, EnteredId2> 
<field2, EnteredId2> 

где EnteredId находится в отсортированном виде (т.е. 1,1,1,1,2,2,2, ...). Теперь я хочу еще один список, который будет иметь объекты в соответствии с EnteredIds Как

Object1 will contain 4 records having EnteredId = EnteredId1. 
Object2 will contain 3 records having EnteredId = EnteredId2. 

и так далее .. Я попытался его с помощью карты, но логика, кажется, отнимает очень много времени и очень менее оптимизированы.

Пожалуйста, помогите .. Заранее спасибо ..

+0

Я не совсем понимаю ваш пример: вы говорите, что используете карты, но у вас также есть несколько идентичных ключей. Это не будет работать с нормальной картой. Вы имеете в виду «MultiMap» вместо этого? – Thomas

+0

Вы также говорите, что карта будет сортироваться по 'EnteredId', что является значением карты. Единственная стандартная карта, которую я знаю, которая позволит вам сделать что-то подобное, будет «LinkedHashMap», которая будет заказывать записи по порядку вставки, и, следовательно, значения должны быть отсортированы уже. – Thomas

ответ

1

Хотя я до сих пор не совсем понимаю ваш вопрос, я попытаюсь попытаться ответить на него.

Я предполагаю, что у вас есть карта, как это:

field1->id1 
field2->id1 
field3->id1 
field4->id2 
... 

Я также предполагаю, что вы хотите, чтобы получить это наоборот, то есть

id1 -> field1, field2, field3 
id2 -> field4 
... 

Это может быть достигнуто с помощью Map<Id,List<Field>> или лучше MultiMap который Google Guava или Apache Commons Collections обеспечивают.

+0

Не могли бы вы рассказать о своем ответе? Средства в 'Map >' что такое Id и поле, рассматривающие мой пример? – Ved

+0

@ adn_295 Это был просто я ленивый: 'Id = EnteredId' и' Field' - это тип ключей в вашем примере (например, 'field1',' field2' и т. Д.) – Thomas

+0

ОК. Но как я могу получить эти «EnteredIds» определенным образом? означает из 'map ', как получить уникальный 'EnteredIds'? поскольку они представляют собой несколько записей, имеющих одинаковые «EnteredIds», как показано в примере. – Ved

0

Требуется ли сохранить элементы в отсортированном порядке? Кроме того, вы можете использовать LinkedHashMap, который просто является хэшмапом, который помещает элементы с одним и тем же ключом в связанный список. Поэтому, если вы добавите 3 элемента с введенным ключом 1 (как ключ), они будут сохранены в связанном списке с одним и тем же индексом карты, что позволит O (1) получить доступ к ключу. Это будет очень быстро, если вы не будете хранить много элементов с одним и тем же ключом. Вы можете прочитать немного больше об этом here:

+0

Спасибо за ваш ответ .. я обязательно проверю то же самое. – Ved

Смежные вопросы