2012-03-19 87 views
0

我有一個要求,我將以分類的形式從數據庫中檢索所有記錄。這些記錄將通過DB中的「EnteredIds」字段進行排序。我將完美獲取這些記錄。我將這些記錄放在地圖上。所以肯定我將我的地圖,如:如何合併具有相同/共同字段的對象?

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

等.. 我已經嘗試過使用Map但邏輯似乎是非常耗費時間和非常少的優化。

請幫助.. 在此先感謝..

+0

我不太明白你的例子:你說你正在使用地圖,但你似乎也有多個相同的密鑰。這不適用於普通地圖。你的意思是'MultiMap'嗎? – Thomas 2012-03-19 07:30:18

+0

你也會說地圖會按照'EnteredId'排序,這是地圖值。我知道的唯一標準地圖可以讓你做類似的事情,那就是一個'LinkedHashMap',它可以通過插入順序來排序條目,因此這些值必須已經被排序。 – Thomas 2012-03-19 07:32:57

回答

1

雖然我仍然不完全瞭解您的問題,我會嘗試嘗試回答它。

我假設你有一個地圖是這樣的:

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

我進一步假設你想圓得到它的另一種方式,即

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

這可以通過使用一個Map<Id,List<Field>>或可實現其中Google GuavaApache Commons Collections提供更好的MultiMap

+0

你能否詳細說明你的答案?在'地圖>中的含義「考慮我的例子,Id和字段是什麼? – Ved 2012-03-19 08:28:43

+0

@ adn_295這只是我bein lazy:'Id = EnteredId'和'Field'是你例子中鍵的類型(即'field1','field2'等) – Thomas 2012-03-19 08:47:15

+0

OK。但是我怎樣才能以不同的方式獲得這些'EnteredIds'?從'map '的意思是,如何得到唯一的'EnteredIds'?因爲它們是多個具有相同「EnteredIds」的記錄,如示例所示。 – Ved 2012-03-19 08:59:14

0

是保持在一個有序的方式的元素需要它?否則,您可以使用LinkedHashMap,它只是一個散列表,它將元素在鏈接列表中放入同一個鍵中。因此,如果您使用enteredId1(作爲關鍵字)添加3個元素,則它們將存儲在鏈接列表中與地圖相同的索引處,這將允許O(1)訪問該關鍵點。除非你用相同的密鑰存儲大量的元素,否則這將會非常快。您可以詳細瞭解它here:

+0

謝謝你的回覆..我一定會檢查一樣的。 – Ved 2012-03-19 08:31:28

相關問題