【问题标题】:Dynamically creating Arraylist based on a criteria and adding data to it根据条件动态创建 Arraylist 并向其添加数据
【发布时间】:2026-01-31 12:00:02
【问题描述】:

我有一个 Arralist,其中包含一组对象,其中每个对象都有字段(部门名称、年份、计数)。我知道我们可以使用 for 循环动态创建 arraylist

     List<List<ReportEPVO>> dataList = new ArrayList<List<ReportEPVO>>();

     for(int i = 1; i <= n; i++) {
         List<ReportEPVO> tempList = new ArrayList<ReportEPVO>();
         dataList.add(tempList);
     }

我的要求是,例如:有年份字段分别为 2013、2014、2015 的对象。我想动态创建数组列表并在同一数组列表上添加具有相同年份字段的对象。有什么帮助吗?请不要反对我是数据结构的新手..

这可能是将带有 yearfield 2013 的对象添加到名为 temp13 的数组列表的代码。

    List<ReportEPVO> temp13 = new ArrayList<ReportEPVO>();
    for(ReportEPVO re : reportEPvo) {
        if(re.getJoinYear().equals("2013") )
            temp13.add(re);
    }

如何动态创建数组列表来存储对象,例如带有 2013 年、2014 年等的年字段?

【问题讨论】:

  • 请展示您为实现该目标而编写的代码。
  • 请只用一个真实的例子来缩写。你不是太具体,无法清除你的观点。谢谢
  • 如果您尝试根据字段值对记录进行分组,您应该使用 Map。
  • 也许使用Map 会更好地满足您的需求Map&lt;String, List&lt;ReportEPVO&gt;&gt; dataMap = new HashMap&lt;&gt;();。这样,关键是您的Year,您的所有条目都有一个List
  • @xenteros 将在我完成运行 dat 代码后立即执行

标签: java arraylist


【解决方案1】:

一般在这种情况下我会做类似的事情

Map<String, List<MyObject> myListMap = new HashMap();

for(MyObject myObject : myObjects){
   List<Object> myObjectList = myListMap.get(myObject.getIndexAttribute());
   if(myObjectList == null){
       myObjectList = new ArrayList();
       myListMap.put(myObject.getIndexAttribute(), myObjectList);
   }
   myObjectList.add(myObject);
}

【讨论】:

  • 请不要介意你需要 Map> myListMap = new HashMap();在代码中对吗?
  • 好的,但是这段代码会根据对象的年份来存储对象吗?
  • 此代码将根据索引属性的值对记录进行分组。该字段的每个单独值都将与对象列表相关联,如果该值始终是唯一的,则列表大小将始终为 1,否则您将获得不同大小的列表。您的问题非常抽象,您需要使其更加具体,然后才能做出任何保证。
  • 好的,我会让它更具体。用户输入“FromYear”和“toYear”,即假设用户输入 2013 作为 fromyear 和 2015 作为 toyear,我想分别打印 2013、14、15 年在每个部门工作的工人的数量。我使用表连接查询并将结果返回到一个数组列表,但它分别包含 2013、14、15 年的所有工人计数。所以我想动态创建数组列表(在本例中为 3 个)以根据各自的年份存储计数和部门。我的问题清楚了吗?
  • @kuttanpillai 是您工作了 2 年的工人在结果中出现了两次吗?由于您只有一个 Year 字段,我想是这样......这个解决方案很好。 getIndexAttribute 是 getJoinYear()。 (地图的关键)。这是一个通用的解决方案,您只需要使用您的 Object 和 getter 进行更新即可使用它。而且代码很优雅。