Java - 如何根据列表元素的属性分隔列表

时间:2010-10-21 18:45:25

标签: java data-structures

我有一个我想要执行操作的对象列表。但是我首先需要将列表划分为单独的列表,以便具有相同parentID的所有项目都在同一列表中,然后分别对每个列表执行操作(原因是操作将对象的parentID作为参数)。

根据此要求,基于其元素的给定属性分隔列表的最佳方法是什么?将在原始列表中传递的最大对象数是< 10,000和通常将< 1000。

非常感谢所有帮助!

4 个答案:

答案 0 :(得分:6)

听起来您可能希望使用Multimaps.index中的Guava。这将构建一个多映射,其中每个键都有一个元素集合。

传入keyFunction的{​​{1}}将是index,它只是从单个元素中检索属性。

答案 1 :(得分:3)

创建

 Map <IdType, List<YourObject>> map

循环遍历列表,并为每个id执行类似

的操作
List theList = map.get(id);
if (theList == null ) {
   // create a new list, add it to the map under the id

}  

// add the item to theList

然后你可以循环通过地图的条目,你有一个每个id的对象列表。这种方法不需要您知道列表中有多少不同的ID开始....

答案 2 :(得分:1)

我建议编写一个包装迭代器的迭代器,只返回符合你想要的元素。然后你可以编写一个Iterable的实现,它接受一个I​​terable,返回这样一个迭代器(这将允许你使用增强的for循环)。

答案 3 :(得分:0)

如果您可以添加第三方库,Google的Guava会提供各种可以帮助您解决问题的实用程序。

具体来说,请使用Collections2.transform,如下所示:

Collection myOriginalList;
Collection mySplitList1 = Collections2.transform(myOriginalList, new Function() { /* method to filter out parent ID 1 */ });
... // repeat for each parent id you're interested in