我有一个我想要执行操作的对象列表。但是我首先需要将列表划分为单独的列表,以便具有相同parentID的所有项目都在同一列表中,然后分别对每个列表执行操作(原因是操作将对象的parentID作为参数)。
根据此要求,基于其元素的给定属性分隔列表的最佳方法是什么?将在原始列表中传递的最大对象数是< 10,000和通常将< 1000。
非常感谢所有帮助!
答案 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的实现,它接受一个Iterable,返回这样一个迭代器(这将允许你使用增强的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