如何合并具有相同/共同字段的对象?

时间:2012-03-19 07:23:21

标签: java sorting map merge

我有一个要求,我将以排序的形式从数据库中检索所有记录。这些记录将按" EnteredIds"进行排序。 DB中的字段。我正在完美地获取这些记录。我将这些记录放在Map中。所以我肯定会有我的地图:

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

其中EnteredId是排序形式(即1,1,1,1,2,2,2,...)。 现在我想要另一个列表,它将根据EnteredIds Like

包含对象
Object1 will contain 4 records having EnteredId = EnteredId1.
Object2 will contain 3 records having EnteredId = EnteredId2.

等等.. 我已经尝试使用Map,但逻辑似乎非常耗费时间并且非常不优化。

请帮忙.. 提前谢谢..

2 个答案:

答案 0 :(得分:1)

虽然我仍然不完全理解你的问题,但我会尝试回答它。

我假设您有这样的地图:

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

我进一步假设你想要反过来,即

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

这可以通过使用Map<Id,List<Field>>Google GuavaApache Commons Collections提供的MultiMap来实现。

答案 1 :(得分:0)

是否需要以有序的方式保留元素?否则,您可以使用LinkedHashMap,它只是一个散列映射,它将具有相同键的元素放在链表中。因此,如果使用enteredId1(作为键)添加3个元素,它们将存储在地图相同索引处的链接列表中,这将允许O(1)访问该键。除非您使用相同的密钥存储大量元素,否则这将非常快。您可以阅读更多相关信息here: