2012-07-16 66 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

相關問題