-2

Category、Activity、Time の形式を持つ HashMap 要素の ArrayList があります。IE

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

リストで発生する可能性があるため、繰り返される CATEGORY/ACTIVITY ペアに注意してください

このリストを多次元リストに変換できる必要があります。このリストをどのように表示する必要があるかについて私が考える最善の方法は、疑似コードを記述することです...投稿の下部にあるそれを参照してください。

これを実装する方法についていくつかの異なるアプローチを考えましたが、率直に言って、これを行う方法に行き詰まってイライラしています。外側と内側のループで 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 がメンバーであるクラスを拡張することです。

ローカライズされすぎているため、別の人と同様に、この質問を閉じるために投票しました。他の開発者の何人かがそれに続いて質問を締めくくることができれば幸いです。削除しますが、質問への回答があるため、現時点では削除できません。

4

2 に答える 2

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();
    }  
}  
于 2012-07-16T18:14:53.593 に答える
2

Collections API を使用する際に発生する問題は、抽象化が不十分なことに加えてActivities、特定のCategory. Categoryがキーの場合List<Activity>、 の値としてa を使用する必要があります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.
}

あなたの時間単位の考え方も不十分だと思います。TIME=10 が 10 時間、日、週、月、年、数十年を意味するかどうかはわかりません。特にこの文脈では、単位は非常に重要です。異なる単位を使用する時間を一緒に追加したくないでしょう。

于 2012-07-16T18:19:18.403 に答える