2012-03-19 19 views
0

私はソートされた形式でDBからすべてのレコードを取得する必要があります。これらのレコードは、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. 

と..

同様。

+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>>かを使用することによって達成することができ、あなたはそれを他の方法でラウンドを取得したいと仮定より良いa MultiMapGoogle GuavaまたはApache Commons Collectionsが提供されます。

+0

あなたはあなたの答えを詳しく述べることができますか? 'Map >の意味' Idとは何ですか? – Ved

+0

@ adn_295私は怠け者でした: 'Id = EnteredId'と' Field'はあなたの例のキーのタイプです(つまり 'field1'、' field2'など) – Thomas

+0

OKです。しかし、どうやって「EnteredIds」を別の方法で入手できますか?一意の 'EnteredIds'を得る方法' map 'からの手段ですか?例のように同じ「EnteredIds」を持つ複数のレコードであるためです。 – Ved

0

は、それがソート方法で要素を維持するために必要です..事前に 感謝を助けてください?そうでなければLinkedHashMapを使うことができます。ハッシュマップは単純に同じキーを持つ要素をリンクリストに入れます。したがって、3つの要素を(キーとして)入力Id1で追加すると、地図の同じインデックスにリンクされたリストに格納され、キーへのO(1)アクセスが可能になります。あなたが同じ鍵で多くの要素を保存しない限り、これは非常に速くなります。あなたはそれについてもう少し読むことができますhere:

+0

あなたの返信ありがとう..私は確かに同じをチェックします。 – Ved

関連する問題