2012-07-16 73 views
-2

我有一个具有Category,Activity和Time格式的HashMap元素的ArrayList。 I.E.将ArrayList <HashMap>转换为多维列表

{CATEGORY=Planning, ACTIVITY=Bills, TIME=5} 
{CATEGORY=Planning, ACTIVITY=Bills, TIME=7} 
{CATEGORY=Planning, ACTIVITY=Meetings, TIME=10} 
{CATEGORY=Resources, ACTIVITY=Room1, TIME=15} 
.... 

注意到,被重复,可以在列表

我需要能够名单转化为多维一个发生类别/活动对。我能想到的这个List需要看的最好方式是编写一些伪代码......请在帖子的底部看看。

我想过如何实现这一点的几种不同的方法,但我很坦率地坚持和沮丧在如何做到这一点。我曾经考虑过在外部和内部循环中多次循环ArrayList的低效方法,但我知道这不会是好的编程习惯。

有关如何实现此转换的任何建议,以便我可以在下面的伪代码中循环?

For CATEGORY in CATEGORIES { 
    CategoryTime = 0 
    Display Category Header 
    For ACTIVITY in ACTIVITIES { 
     Activity Time = 0 
     For TIME_RECORD in ACTIVITY 
      Add time to activity total time, category total time & grand total 
     } 
     Display Activity Total 
    } 
    Display Category Total 
} 
Display Grand Total and rest of information... 

编辑 我明白了这个问题给出的所有反馈,它似乎真的去最好的办法是提高一类HashMap的元素是ArrayList中的一员。

我已经投了票来关闭这个问题,因为它太过本地化。如果你们其他的开发人员会跟着去解决这个问题,我将不胜感激。我会删除它,但我不能在这一点上,因为有问题的答案。

+3

我的袖口建议 - 而不是试图做一个多维列表,做一些类,并使用它们... – corsiKa 2012-07-16 18:08:56

+0

是的。这对于具有“category”,“activity”和“time”字段的类大声疾呼。 – 2012-07-16 18:10:47

+0

@corsiKa - 我也想过这样做,但我想这可以通过使用Collections API实现,而无需制作自定义类... – 2012-07-16 18:11:04

回答

3

我会写一个类,它看起来像这样:

public class Planner 
{  
    Map<Category, Collection<Planner> details; 
    String activity; 
    long time; 

} 

public enum Category 
{ 
    PLANNING,RESOURCES,ETC; 
}  

那么你应该能够做到以下几点:

for(Category current: Planner.getDetails().keySet()) 
{ 
    CategoryTime = 0 
    Display Category Header 
    Activity Time = 0 
    for(Planner currentPlanner : planner.getDetails().get(current)) 
    { 
      currentPlanner.getActivity(); 
      Activity Time += currentPlanner.getTime(); 
    } 
} 
+0

请原谅我的误解,但是在这里“Planner”的处理方式是什么?我的帖子没有提到“Planner”。我有“计划”活动...对不起,刚刚被“计划者”抛弃...... – 2012-07-16 18:33:23

+0

@ZackMacomber看起来像一个规划师给我。它有一个类别,一个活动和一个时间。你有没有使用Outlook的日历计划片?这听起来像是一个原始版本。 – Woot4Moo 2012-07-16 18:34:15

+0

行 - 有你。我试图解决的业务问题确实与规划有一点关系......它实际上是针对账单...... – 2012-07-16 18:36:24

2

你必须与使用集合API的问题,除了一个糟糕的抽象,是你必须为给定的Category存储很多Activities。如果Category是关键字,那么您不得不将List<Activity>作为Map中的值。如果你查询给定的Category,你的工作没有完成:你必须遍历List<Activity>找到你想要的。你怎么知道?

这不是Map;这是一个多地图。

我同意那些推荐上课的人。这会好得多,而不是那么多的工作。更好的抽象和更多的信息隐藏对你和你的客户通常更好。

public class Activity { 
    private Category category; 
    private Duration duration; // You want to encapsulate value and units together, right? 
    // I can see sequencing information that could be useful. Your whole Planner seems to be in need of work. 
} 

我认为你对时间单位的想法也做得不好。我不知道时间= 10是否意味着10小时,几天,几周,几个月,几年,几十年 - 你明白了。单位很重要,特别是在这方面。你不希望人们一起加入使用不同单位的时间。

+0

当我对Woot4Moo发表评论时,与“Planner”有什么关系? – 2012-07-16 18:33:58

+0

没有人会抛弃,但你。你正在改变主题。 – duffymo 2012-07-16 18:37:03

+0

我建议其他人被抛弃,但我?我同意我确实被抛弃了,这就是为什么我在这里发布...... – 2012-07-16 18:40:03

相关问题